SelectedItem、SelectedValue、SelectedValuePathの違い 質問する

SelectedItem、SelectedValue、SelectedValuePathの違い 質問する

次の違いは何ですか?

これらの依存関係プロパティはすべて、セレクタクラス。私は 、 、 とよく混同しSelectedItemます。SelectedValueSelectedValueSelectedValuePath

SelectedValueそれらの違い、また、特にと をいつ使用するのかを知りたいですSelectedValuePath。簡単な例を挙げて、それらの使い方を説明してください。

ベストアンサー1

名前が少しわかりにくいかもしれません :)。要約すると次のようになります。

  • SelectedItemプロパティは、リストバインドされているオブジェクト全体を返します。つまり、リストをCategoryオブジェクトのコレクションにバインドしたとします (各 Category オブジェクトには Name プロパティと ID プロパティがあります)。例: ObservableCollection<Category>。このSelectedItemプロパティは、現在選択されているオブジェクトを返しますCategory。ただし、バインドの目的では、これが常に必要なわけではありません。これは、リストがバインドされているプロパティに Category オブジェクト全体をバインドすることしかできず、その Category オブジェクトの単一のプロパティの値 (そのIDプロパティなど) をバインドすることはできないためです。

  • したがって、SelectedValuePathプロパティとSelectedValueプロパティは、バインドの代替手段として使用できます (これらは互いに組み合わせて使用​​します)。Productビューがバインドされているオブジェクトがあるとします (ProductName、Weight などのプロパティを持つ)。また、CategoryIDその Product オブジェクトにプロパティがあり、ユーザーがカテゴリのリストから製品のカテゴリを選択できるようにするとします。Category オブジェクトの ID プロパティを、CategoryIDProduct オブジェクトのプロパティに割り当てる必要があります。ここで、プロパティSelectedValuePathSelectedValueプロパティが役立ちます。を使用して、リストがバインドされている Product オブジェクトのプロパティに Category オブジェクトの ID プロパティを割り当てるように指定しSelectedValuePath='ID'、そのSelectedValueプロパティを DataContext (つまり、Product) のプロパティにバインドします。

以下の例はこれを示しています。ComboBox が (ItemsSource 経由で) カテゴリのリストにバインドされています。製品の CategoryID プロパティを選択された値としてバインドしています (SelectedValue プロパティを使用)。これを、SelectedValuePath プロパティ経由でカテゴリの ID プロパティに関連付けています。また、DisplayMemberPath プロパティを使用して、ComboBox に Name プロパティのみを表示するようにしています。

<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; }
}

最初は少し混乱しますが、これで少しは明確になると思います... :)

クリス

おすすめ記事