ベストアンサー1
名前が少しわかりにくいかもしれません :)。要約すると次のようになります。
SelectedItemプロパティは、リストがバインドされているオブジェクト全体を返します。つまり、リストを
Category
オブジェクトのコレクションにバインドしたとします (各 Category オブジェクトには Name プロパティと ID プロパティがあります)。例:ObservableCollection<Category>
。このSelectedItem
プロパティは、現在選択されているオブジェクトを返しますCategory
。ただし、バインドの目的では、これが常に必要なわけではありません。これは、リストがバインドされているプロパティに Category オブジェクト全体をバインドすることしかできず、その Category オブジェクトの単一のプロパティの値 (そのID
プロパティなど) をバインドすることはできないためです。したがって、SelectedValuePathプロパティとSelectedValueプロパティは、バインドの代替手段として使用できます (これらは互いに組み合わせて使用します)。
Product
ビューがバインドされているオブジェクトがあるとします (ProductName、Weight などのプロパティを持つ)。また、CategoryID
その Product オブジェクトにプロパティがあり、ユーザーがカテゴリのリストから製品のカテゴリを選択できるようにするとします。Category オブジェクトの ID プロパティを、CategoryID
Product オブジェクトのプロパティに割り当てる必要があります。ここで、プロパティSelectedValuePath
とSelectedValue
プロパティが役立ちます。を使用して、リストがバインドされている 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; }
}
最初は少し混乱しますが、これで少しは明確になると思います... :)
クリス