【问题标题】:Default Value of ComboBox based on a property基于属性的 ComboBox 的默认值
【发布时间】:2012-08-27 18:27:54
【问题描述】:

我有一个如下的数据绑定 ComboBox:

     <ComboBox x:Name="MyEmployee" DisplayMemberPath="Name" ItemsSource={Binding Path=MyEmployeeList}"/>

DataContext 如下所示:

MyDataContext = new DataContext
{
  MyEmployeeList = {
  new Employee{ Name = "Vishnu", Id = 1 },
  new Employee{ Name = "Satyam", Id = 2 },
  },

  PermanentEmployee = "Vishnu";
};

我希望能够根据另一个属性的值设置 ComboBox 的默认值:“PermanentEmployee”。

可以安全地假设“PermanentEmployee”将属于“EmployeeList”中的“Name”属性之一。

如何为 ComboBox 设置这样的默认值?

【问题讨论】:

    标签: .net wpf xaml data-binding combobox


    【解决方案1】:

    您可以使用SelectedItem,或SelectedValueSelectedValuePath

    由于 WPF 通过引用比较对象,SelectedValue 仅在项目的 .Equals() 为真时才有效,因此如果您要比较对象,则必须让您的 SelectedItem 指向内存中完全相同的引用作为ItemsSource 中的项目。例如,

    MyEmployeeList = {
        new Employee{ Name = "Vishnu", Id = 1 },
        new Employee{ Name = "Satyam", Id = 2 },
    };
    
    // Won't work
    PermanentEmployee = new Employee{ Name = "Vishnu", Id = 1 };
    
    // Works
    PermanentEmployee = MyEmployeeList.FirstOrDefault(p => p.Name == "Vishnu");
    

    根据您在问题中显示的代码,您最好使用 SelectedValueSelectedValuePath

    <ComboBox x:Name="MyEmployee" 
              DisplayMemberPath="Name" 
              ItemsSource="{Binding Path=MyEmployeeList}"
              SelectedValue="{Binding PermanentEmployee}"
              SelectedValuePath="Name" />
    

    【讨论】:

      【解决方案2】:

      您将使用 SelectedValue 属性,例如:

      <ComboBox x:Name="MyEmployee" DisplayMemberPath="Name" ItemsSource="{Binding Path=MyEmployeeList}" Height="25" Width="50" SelectedValue="{Binding Path=PermanentEmployee}"/>
      

      修改:

      正确错过了,在视图模型中将 PermanentEmployee 设为 Employee 数据类型。示例:

         public Employee PermanentEmployee
          {
              get;
              set;
          }
      

      然后在您的构造函数中执行以下操作:

      PermanentEmployee = MyEmployeeList.Where(r => r.Name == "Vishnu").Single();

      【讨论】:

      • 建议无效。 DataBinding 不会在输出窗口中显示任何错误。在 XAML ComboBox 元素中,SelectedValue 将指向 MyEmployeeList 作为其 DataContext 的各个项目。我相信这就是您的建议行不通的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 2011-02-05
      • 2013-05-30
      • 2012-08-07
      相关资源
      最近更新 更多