我有以下课程(我会保持这个简单。请假设我已经实现了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绑定到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,其语言ID为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值?
答案 0 :(得分:0)
当 SelectedItem 属性更新时,Combobox使用 object.Equals 来显示 ItemsSource 中的项目,因此您有多种方法可以实现期望的行为: