ComboBox中的SelectedItem绑定

时间:2019-04-26 07:51:36

标签: c# wpf mvvm

我在绑定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属性以及作为界面的items类型。

我知道,不可能创建接口的实例,但是我不知道这种类型的绑定对象是否不正确。但是我试图绑定到另一种实现该接口的对象类型,结果是相同的。

1 个答案:

答案 0 :(得分:2)

SelectedCategory= CategoryList [0];

vm.SelectedCategory = vm.CategoryList.Where(w => w.Name == catName).FirstOrDefault();

这两个需要更改

注意:您不必为SelectionChanged创建事件。如果在ui中更改了该项目,它将假定您使用MVVM自动分配给SelectedCategory ,因此您需要设置数据上下文