【发布时间】:2014-03-11 19:30:08
【问题描述】:
我有以下类(我会保持简单。请假设我已经实现了 INotifyPropertyChanged):
AddMovieViewModel
{
public Movie NewMovie {get;set;}
public ObservableCollection<Language> LanguageList {get;set;}
}
Movie
{
public Language MovieLanguage {get;set;}
}
Langauge
{
public int LanguageID {get;set;}
public string LanguageName {get;set;}
}
现在我有一个包含以下 ComboBox 的 View(DataContext bound to AddMovieViewModel):
<ComboBox ItemsSource="{Binding LanguageList}" Style="{x:Null}"
DisplayMemberPath="LanguageName"
SelectedValuePath="LanguageID"
SelectedItem="{Binding NewMovie.MovieLanguage, Mode=TwoWay}"
SelectedValue="{Binding NewMovie.MovieLanguage.LanguageID, Mode=TwoWay}" />
要求:假设我有一个 AddMovieViewModel.LanguageList,其 LanguageID 从 1 到 5。程序将首先从数据库中获取默认语言 ID - 假设它是 2。这个 LanguageID 属于 NewMovie 对象,即 NewMovie 将将其 MovieLanguage 属性设置为 LanguageID 值为 2 的 Language 对象。现在 ComboBox 应该显示与 LanguageID = 2 对应的 Language 项。希望这不会造成混淆。
问题:我想知道,我是否必须从视图模型的 LanguageList 中检索相关的 Language 对象(LanguageID=2),然后将其设置为 NewMovie.MovieLanguage 属性,如下所示:
NewMovie.MovieLanguage = LanguageList.First(lang => lang.LanguageID == 2);
或者有没有更好的替代方法来实现这一点而不使用 Linq 语法?这是正确的方法吗? NewMovie.MovieLanguage 对象是否必须来自 LanguageList 集合才能将 ComboBox 显示为 SelectedItem ? Binding 是执行一些哈希检查还是尝试匹配 LanguageID 值?
【问题讨论】:
标签: c# wpf data-binding mvvm