0

次のように、データバインドされた 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";
};

別のプロパティ「PermanentEmployee」の値に基づいて ComboBox のデフォルト値を設定できるようにしたいと考えています。

「PermanentEmployee」は、「EmployeeList」の「Name」プロパティの 1 つに含まれていると想定できます。

ComboBox にそのようなデフォルト値を設定するにはどうすればよいですか?

4

2 に答える 2

2

SelectedItem、 またはSelectedValueおよびのいずれかを使用できます。SelectedValuePath

WPF は参照によってオブジェクトを比較するため、アイテムの が true の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" />
于 2012-08-27T19:51:50.077 に答える
0

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 == "ヴィシュヌ").Single();

于 2012-08-27T18:56:11.987 に答える