私はObservableCollectionにバインドされたListBoxを持っており、ListBox.ItemTemplateの中には別のObservableCollectionにバインドされたComboBoxがあります。WPFのリストボックスでバインドされたコンボボックスを更新するにはどうすればよいですか?
私が必要とするのは、ListBoxデータを保存した後でComboBoxを更新することです。保存した後
public ObservableCollection<KeyValue> _KeyValues = null;
public ObservableCollection<KeyValue> KeyValues
{
get
{
if (_KeyValues == null)
{
// _KeyValues = ... (Database call)
}
return _KeyValues;
}
}
public ObservableCollection<KeyValue> _SelectableKeyValues = null;
public ObservableCollection<KeyValue> SelectableKeyValues
{
get
{
if (_SelectableKeyValues == null)
{
// _SelectableKeyValues = ... (Database call)
}
return _SelectableKeyValues;
}
}
と呼ばれる方法:ここでは、C#コード内のプロパティ
<ListBox Name="listBox" HorizontalContentAlignment="Stretch" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding KeyValues, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderThickness="1" BorderBrush="Gray" CornerRadius="4" Margin="0,1,1,1" Background="#EEE">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="3*" />
<ColumnDefinition Width="70" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<Label Grid.Column="1" Margin="0,1">Value</Label>
<TextBox Grid.Column="2" Margin="0,1" Text="{Binding Path=Value}" />
<Label Grid.Column="3" Margin="0,1">Combo 1</Label>
<ComboBox Grid.Column="4" Margin="0,1" SelectedValue="{Binding Path=Combo1}" SelectedValuePath="Key" DisplayMemberPath="Value" ItemsSource="{Binding SelectableKeyValues, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
と:
public void RefreshData()
{
listBox.Items.Refresh();
_SelectableKeyValues = null;
}
Iここで
は私のXAMLです試してみた手動でそのコレクションが、結果は常に同じであるリロードする:コンボボックスにを私は(私があると確信しています)、新しい要素
を見つけることはありません私が間違って何をやっていますか?
簡単なヒントは、コンボボックスアイテムソースのバインディング – michele
にMode = TwoWayを設定すると読み込み専用のプロパティであるため、機能しません。 – p4bl0