次のコレクションを含む非常に単純な ViewModel を作成しました
public ObservableCollection<Reader> Readers
{
get
{
if(_readers == null)
{
_readers = new ObservableCollection<Reader>();
}
return _readers;
}
set
{
_readers = value;
}
}
番号ピッカーが変更されたら、次のように Reader をコレクションに追加します。
_activeServer.Readers.Add(Readers.Instance.AllReaders[0]);
DataContext を Readers コレクションを含むクラスに設定し、ComboBox の ListBox を次のようにアイテムにバインドしようとしました。
<ListBox Name="_lbLanes"
BorderThickness="0"
Height="200"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ItemsSource="{Binding Readers}" >
<ListBox.ItemTemplate>
<DataTemplate>
<ComboBox Name="_cbReaders"
Margin="0,0,0,10"
ItemsSource="{Binding Source={x:Static models:Readers.Instance}, Path=AllReaders}"
DisplayMemberPath="Name"
SelectedItem="{Binding Path=., Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
MinWidth="400">
</ComboBox>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
自分自身にバインドしていて、モードを TwoWay に設定していることがわかります。
また、SelectedValue と SelectedItem をバインドしようとしましたが、どちらも次の問題を引き起こします...
[保存] をクリックしてページをコミットすると、アイテムの Readers コレクションの内容がチェックされ、すべてが Readers.Instance.AllReaders[0] に等しい初期値に設定されます。双方向バインディングが必要ですが、これは可能ですか、それともすべてのコンボボックス内で選択されたアイテムを手動で取得する必要がありますか?
お時間を割いてご返信いただきありがとうございます
ダン