示例代码:DataGridComboBoxColumn不显示的ObservableCollection
class GameListViewModel {
private IGameRepository repository;
public GameViewModel GameViewModel { get; set; }
public ObservableCollection<GameViewModel> Games { get; set; }
public ObservableCollection<GenreViewModel> Genres { get; set; }
public ICommand AddGame_ { get; set; }
public GameListViewModel() {
repository = new DummyGameRepository();
GameViewModel = new GameViewModel();
Games = new ObservableCollection<GameViewModel>(repository.GameList().Select(game => new GameViewModel(game)));
Genres = new ObservableCollection<GenreViewModel>(repository.GameList().Select(game => game.Genre).Distinct().Select(genre => new GenreViewModel(genre)));
AddGame_ = new RelayCommand(AddGame, CanAddGame);
}
}
class Game {
public string Title { get; set; }
public string SubTitle { get; set; }
public int Pegi { get; set; }
public Genre Genre { get; set; }
}
XAML:
<DataGrid ItemsSource="{Binding Games}" AutoGenerateColumns="False" Margin="0,32">
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Binding="{Binding Title}" />
<DataGridTextColumn Header="Sub-Title" Binding="{Binding SubTitle}" />
<DataGridTextColumn Header="Pegi" Binding="{Binding Pegi}" />
<DataGridTextColumn Header="Genre" Binding="{Binding Genre.Name}" />
<DataGridComboBoxColumn Header="Test" ItemsSource="{Binding Genres}" DisplayMemberPath="Name" />
</DataGrid.Columns>
</DataGrid>
的问题是,我想组合框来显示所有可能的流派加入到游戏动态。为此,我在GameListViewModel中创建了一个ObservableCollection。这是行不通的!我现在一直在挣扎2个小时......后来我想让选定的值成为游戏中的流派。
但加载输入上下文是(现在)没有在DataGrid的背景下,只有被选中的值应该是...而这个例子给我的解决方案并没有解决我的问题......有没有另一种方法? – Ken 2014-11-22 23:59:07
我相信我之前的评论依然存在 - 你不能指望从列a-la ItemsSource =“{Binding Genres}”直接绑定到虚拟机。在我的更新示例中,我使用静态资源来解决第一个问题。后来,当你实现一个项目特定的体裁集合的可能性,你将不得不使用更像我包含在链接中的东西。 – Andrew 2014-11-23 00:44:25