簡體   English   中英

WPF ComboBox MVVM數據綁定問題

[英]WPF ComboBox MVVM DataBinding Issue

我有以下類(我將保持簡單。請假設我已經實現了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}" />

要求:假設我有一個從1到5的LanguageID的AddMovieViewModel.LanguageList。程序將首先從數據庫中獲取一個默認的語言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對象是否必須來自ComboBox的LanguageList集合才能顯示為SelectedItem? 綁定是執行一些哈希檢查還是嘗試匹配LanguageID值?

組合框使用object.Equals來顯示SelectedItem屬性更新后的ItemsSource中的項目,因此您可以通過幾種方法來實現所需的行為:

  1. 使用集合中的引用。 實際上,這是您使用Linq的示例。
  2. 在Language類中重寫Equals方法。
  3. 使用SelectedIndex屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM