[英]SelectedItem binding in ComboBox
我綁定到ComboBox的SelectedItem屬性時遇到問題。
應用程序中有一個ObservableCollection,它綁定到ItemsSource屬性,另一個對象字段是我要綁定到SelectedItem屬性。
但是由於目標調用異常,應用程序甚至無法啟動。
我不知道,將SelectedItem與ItemsSource的一個實例的屬性之一綁定是否重要,或者我可以在viewmodel中使用它聲明另一個屬性。 我嘗試了兩種變體。 沒有幫助。 我已經閱讀了有關此類問題的一些線索,但這些解決方案無法解決此問題。
<ComboBox x:Name="CategoryComboBox"
ItemsSource="{Binding CategoryList}"
DisplayMemberPath="Name"
SelectedItem="{Binding SelectedCategory, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectionChanged="CategoryComboBox_SelectionChanged"
/>
public ObservableCollection<IItem> CategoryList { get; set; }
public IItem SelectedCategory
{
get
{
return _selectedCategory;
}
set
{
_selectedCategory = value;
RaisePropertyChangedEvent(nameof(SelectedCategory));
}
}
public interface IItem
{
int Id { get; set; }
string Name { get; set; }
}
private void CategoryComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var catName = (e.AddedItems[0] as IItem).Name;
vm.SelectedCategory = vm.CategoryList.Where(w => w.Name == catName).Select(s => s.Id).FirstOrDefault();
}
public void LoadLanguageList()
{
LanguageList = Repository.Current.GetLanguageList();
_selectedLanguage = LanguageList.FirstOrDefault(i => i.Id == 1);
RaisePropertyChangedEvent(nameof(SelectedLanguage));
}
在代碼上方,您可以看到方式,我如何嘗試進行綁定,然后可以將collection屬性,selected item屬性和項目類型作為界面。
我知道,不可能創建接口的實例,但是我不知道這種類型的綁定對象是否不正確。 但是我試圖綁定到另一種對象類型的類,該對象類型實現了此接口,結果是相同的。
SelectedCategory= CategoryList [0];
vm.SelectedCategory = vm.CategoryList.Where(w => w.Name == catName).FirstOrDefault();
這兩個需要更改
注意:您不必為SelectionChanged
創建事件。 如果在ui中更改了該項目,它將假定您使用MVVM 自動分配給SelectedCategory
因此您可以設置數據上下文
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.