1. ホーム
  2. wpf

[解決済み] SelectedItem、SelectedValue、SelectedValuePathの違いについて

2022-03-25 15:39:24

質問

以下の違いは何ですか。

これらの依存関係のプロパティはすべて セレクタ クラスがあります。よく混同するのが SelectedItemSelectedValue であり、かつ SelectedValueSelectedValuePath .

その違いや、どのような場合に使うのか知りたいのですが、特に SelectedValueSelectedValuePath . その 使用 を、簡単な例とともに紹介します。

解決方法は?

名前はちょっとわかりにくいかもしれませんね :). 以下はその要約です。

  • 選択された項目 プロパティは、リストがバインドされているオブジェクト全体を返します。 例えば、リストが Category オブジェクト(各カテゴリオブジェクトはNameとIDのプロパティを持つ)。 ObservableCollection<Category> . その SelectedItem プロパティは、現在選択されている Category オブジェクトを作成します。 なぜなら、これはカテゴリオブジェクト全体をリストがバインドされているプロパティにバインドすることを可能にするだけで、そのカテゴリオブジェクトの単一のプロパティの値 (例えば ID というプロパティがあります。)

  • したがって、私たちは 選択された値のパス プロパティと 選択された値 プロパティをバインディングの代替手段として使用することができます(これらは互いに組み合わせて使用します)。 例えば Product オブジェクトにバインドされています (ProductName や Weight などのプロパティがあります)。 また CategoryID プロパティがあり、ユーザーがカテゴリ一覧から商品のカテゴリを選択できるようにしたいとします。 この場合、Category オブジェクトの ID プロパティを CategoryID プロパティを指定します。 ここで SelectedValuePathSelectedValue プロパティが登場します。 Category オブジェクトの ID プロパティを、リストがバインドされている Product オブジェクトのプロパティに割り当てるには、次のように指定します。 SelectedValuePath='ID' をバインドし、さらに SelectedValue プロパティをDataContext (つまりProduct)上のプロパティに設定します。

以下の例では、これを実証しています。 コンボボックスが、(ItemsSourceを介して)カテゴリのリストにバインドされています。 選択された値として、Product の CategoryID プロパティをバインドしています (SelectedValue プロパティを使用します)。 SelectedValuePathプロパティを使って、これをCategoryのIDプロパティに関連付けます。 そして、DisplayMemberPathプロパティで、NameプロパティだけをComboBoxに表示させると言っています)。

<ComboBox ItemsSource="{Binding Categories}" 
          SelectedValue="{Binding CategoryID, Mode=TwoWay}" 
          SelectedValuePath="ID" 
          DisplayMemberPath="Name" />

public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class Product
{
    public int CategoryID { get; set; }
}

最初はちょっとわかりにくいですが、これで少しはわかりやすくなったかな... :)

クリス