【问题标题】:C# WPF MVVM ComboBox BindingC# WPF MVVM 组合框绑定
【发布时间】:2015-04-27 22:12:51
【问题描述】:

首先,我想要做的是将ComboBox 绑定到我的源代码的“简单”绑定。

结构类似于:

public class Data
{
    public ObservableList<string> List {get;set;}
    public string Selected {get;set;}
}

此外,它还实现了INotifyPropertyChanged 接口。 我的问题是,我找到了几种通过 XAML 执行此操作的解决方案,不幸的是我无法使用 XAML 执行此操作,因为我的 ComboBoxes 必须在运行时生成。

所以我的问题是,我如何将我的ComboBox 绑定到Data.List,并将选定的项目(值?)绑定到 Data.Selected,而这个应该是 TwoWay,所以我的 Data 类知道某事被选中。请记住,这必须通过 c# 代码(不幸的是,XAML 不是选项)。

提前致谢。 :)

【问题讨论】:

  • XAML 不能生成组合框(比如 ItemsControl)?
  • 很遗憾没有。 ://
  • 实际上问题不在于将 Itemssource 绑定到 List。问题是与 Selected 的绑定。例如。 (new ComboBox()).Itemssource = data.List;
  • 将这两项都作为属性并使用 INotifyPropertyChanged。
  • sry 忘了提,那些是^^(编辑过的帖子)

标签: c# wpf mvvm binding combobox


【解决方案1】:

这很容易。假设 Data 具有属性而不是字段:

public class Data
{
    public Data()
    {
        List = new ObservableCollection<string>
        {
            "Apple", "Orange", "Lime"
        };
    }

    public ObservableCollection<string> List { get; private set; }
    public string Selected { get; set; }
}

你可以这样写:

var comboBox = new ComboBox
{
    DataContext = new Data()
};

comboBox.SetBinding(ComboBox.ItemsSourceProperty, new Binding("List"));
comboBox.SetBinding(ComboBox.SelectedItemProperty, new Binding("Selected") 
{ 
    Mode = BindingMode.TwoWay
});

要将ComboBox 添加到可视化树中,只需为容器调用适当的方法即可。例如,这将适用于任何 ContentControl(如 Window):

AddChild(comboBox);

【讨论】:

  • 像魅力一样工作。 ^_^
【解决方案2】:

如何将我的组合框绑定到 Data.List,以及所选项目(值?)

创建一个包含组合框的自定义复合用户控件。将组合框的属性映射到自定义控件上创建的两个依赖项属性,一个用于加载数据,另一个用于按需提供选定项的数据。任何管道需求都在代码隐藏中完成,最终提供了所有魔力。

然后您可以根据需要在您正在处理的其他页面中在代码隐藏中动态创建/绑定此控件。

【讨论】:

    【解决方案3】:

    听起来像是一种“递归绑定”。如果您的组合在容器控件中,您需要将容器绑定到单个组合模型的集合,因此 ItemsControl 中的每个视图都将绑定到单个组合模型。

    【讨论】:

      猜你喜欢
      • 2015-09-15
      • 1970-01-01
      • 2021-10-11
      • 2015-07-11
      • 2018-06-12
      • 2013-06-20
      • 2011-06-13
      • 2023-03-18
      • 2019-01-20
      相关资源
      最近更新 更多