*はじめに: * 標準の MVVM フレームワークを使用しており、2 つのリストボックスから 1 つの項目を選択できるようにしたいと考えています。リストボックスは、同じクラスの異なる ObservableCollections にバインドされています。
ViewModel にバインドした後、選択しているアイテムに応じてリストボックスのいずれかから、同じウィンドウで選択したアイテムを表すことができるようにしたいと考えています。
ビューモデル -
private KisesaSearchResultViewModel _selectedPerson;
public KisesaSearchResultViewModel SelectedPerson
{
get
{
return _selectedPerson;
}
set
{
_selectedPerson = value;
OnPropertyChanged("SelectedPerson");
}
}
private KisesaSearchResultViewModel _selectedSearch;
public KisesaSearchResultViewModel SelectedSearch
{
get
{
return _selectedSearch;
}
set
{
_selectedSearch = value;
SelectedPerson = value;
OnPropertyChanged("SelectedSearch");
}
}
private KisesaSearchResultViewModel _selectedMatch;
public KisesaSearchResultViewModel SelectedMatch
{
get
{
return _selectedMatch;
}
set
{
_selectedMatch = value;
SelectedPerson = _selectedMatch;
OnPropertyChanged("SelectedMatch");
}
}
XAML -
<ListBox ItemsSource="{Binding Path=MatchedMembers, Mode=OneWay}"
ItemTemplate="{StaticResource SearchResult}"
SelectedItem="{Binding SelectedSearch}">
</ListBox>
<ListBox ItemsSource="{Binding Path=SelectedMatchList, Mode=OneWay}"
ItemTemplate="{StaticResource SearchResult}"
SelectedItem="{Binding SelectedMatch}">
</ListBox>
情報を次のように表示したい:
<TextBlock Grid.Row="1" Text="{Binding Path= SelectedPerson.FullName}" FontSize="18" FontWeight="Bold" Style="{StaticResource PInfo}" />
<TextBlock Grid.Column="0" Grid.Row="2" Style="{StaticResource Info}" Margin="30,0,0,0" Text="{Binding Path=SelectedPerson.Age}"/>
質問: SelectedPerson を個別に変更できるようにしたいので、SelectedSearch と SelectedPerson が必要です。この時点で、SelectedPerson は SelectedSearch セッターによって設定されていますが、Textblock にはバインドされていません。OnPropertyChanged を使用していますが、イベント ハンドラーを使用するなど、他に何かする必要がありますか? また、少し関係ありませんが、一度に 2 つの異なるリストボックスから 1 つの項目だけが選択されるように WPF ウィンドウを制限できますか?