【发布时间】:2023-04-03 08:50:01
【问题描述】:
我在绑定到 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));
}
在上面的代码中你可以看到方式,我是如何尝试绑定的,然后是集合属性,选择项属性和作为接口的项类型。
我知道,创建接口实例是不可能的,但我不知道这种类型的绑定对象是否不正确。但是我尝试绑定另一个对象类型的类,实现了这个接口,结果是一样的。
【问题讨论】:
-
向我们展示您的 SelectionChanged 事件。
-
您的
CategoryList未初始化(它将是null) -
它甚至可以编译吗?
vm.SelectedCategory = vm.CategoryList.Where(w => w.Name == catName).Select(s => s.Id).FirstOrDefault();你正在尝试将一个字符串分配给IItem类型我有一个编译错误 -
如果你使用
vm为什么你需要代码隐藏?CategoryComboBox_SelectionChanged -
_selectedCategory = 0;它会如何编译?