【问题标题】:How to bind to WPF combobox?如何绑定到 WPF 组合框?
【发布时间】:2013-12-12 16:33:55
【问题描述】:

我想将两个类属性绑定到组合框的显示。含义:

Jack - SupplyChain 
Sarah - HR 
James - IT 

我有以下课程:

public class MyUser {
  public string Name {get;set;}
  public int EmpID {get;set;}
  public string Department {get;set;}
}

当我将组合框设置为单个属性 DisplayMemberPath="Name" 时,我在下拉列表中看到了对象名称。

我不知道如何让它绑定到两个属性,更不用说一个了。有人知道怎么做吗?

我正在将 MyClass 对象添加到组合框:

MyComboBox.Items.Add(classInstance);

因为我想退出被选中的整个班级。这将发生在按钮单击事件上。

【问题讨论】:

    标签: .net c#-4.0 wpf-controls


    【解决方案1】:

    不要在 WPF 的过程代码中操作 UI 元素。这就是 XAML 的用途。

    创建一个简单的 ViewModel:

    public class MyViewModel
    {
        public ObservableCollection<MyUser> Users {get;set;}
    
        public MyUser SelectedUser {get;set;}
    }
    

    然后将此 ViewModel 设置为 UI 的 DataContext

    public MyWindow()
    {
        InitializeComponent();
        DataContext = new MyViewModel();
    }
    

    在 XAML 中:

    <ComboBox ItemsSource="{Binding Users}"
              SelectedItem="{Binding SelectedUser}">
        <ComboBox.ItemTemplate>
           <DataTemplate>
               <TextBlock>
                   <TextBlock.Text>
                       <MultiBinding StringFormat="{}{0} {1}">
                          <Binding Path="Name"/>
                          <Binding Path="Department"/>
                       </MultiBinding>
                   </TextBlock.Text>
              </TextBlock>
           </DataTemplate>
        <ComboBox.ItemTemplate>
    </ComboBox>
    

    然后,您只需使用相关数据填充Users 集合,并且每当您需要检索所选值时,您都可以从SelectedUser 属性中检索该值。无需从 UI 手动“读取”数据。这就是DataBinding 的用途。

    【讨论】:

    • 什么是Users和SelectedUser?
    • 我在这个 UI 上有多个组件。将整个 UI 设置为仅一个组件的 DataContext 会干扰其他组件吗?似乎最好只为需要特定 DataContext 的组件设置 DataContext。
    • @4thSpace ViewModel 应该包含整个View 的所有相关数据/表示逻辑。当我谈到 MVVM 方面的 View 时,在 WPF 中,它在概念上转换为 WindowUserControl,具体取决于您的 UI 的结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 2013-10-04
    • 2012-06-18
    • 2011-03-09
    相关资源
    最近更新 更多