【问题标题】:SelectedItem binding in ComboBoxComboBox 中的 SelectedItem 绑定
【发布时间】: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 =&gt; w.Name == catName).Select(s =&gt; s.Id).FirstOrDefault(); 你正在尝试将一个字符串分配给 IItem 类型我有一个编译错误
  • 如果你使用vm 为什么你需要代码隐藏?CategoryComboBox_SelectionChanged
  • _selectedCategory = 0; 它会如何编译?

标签: c# wpf mvvm


【解决方案1】:

SelectedCategory= CategoryList [0];

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

这两个需要改

注意:您不必为SelectionChanged 创建事件。如果项目在 ui 中更改,它将自动分配给 SelectedCategory 我假设你使用 MVVM 所以你设置数据上下文

【讨论】:

  • 真的...) 抱歉我的疏忽
猜你喜欢
  • 2019-11-10
  • 2011-11-01
  • 2016-05-15
  • 1970-01-01
  • 2015-06-28
  • 2017-04-30
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多