如何更新WPF中列表框中绑定的组合框

本文关键字:列表 组合 绑定 WPF 何更新 更新 | 更新日期: 2023-09-27 18:29:40

我有一个ListBox绑定到一个ObservableCollection,在ListBox.ItemTemplate中,我还有一个ComboBox绑定到另一个ObervableCollection。

我需要的是在保存ListBox数据后更新这些ComboBoxes。

这是我的XAML:

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

这里是c#代码中的属性:

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

保存后调用的方法:

public void RefreshData()
{
    listBox.Items.Refresh();
    _SelectableKeyValues = null;
}

我也尝试过手动重新加载该集合,但结果总是一样的:

在组合框中,我从未找到新的元素(我确信有)

我做错了什么?

如何更新WPF中列表框中绑定的组合框

一种方法是在UserControl(包含SelectableKeyValues定义的类)中实现INotifyPropertyChanged接口,并在RefreshData方法内部使用"SelectableKeyValue"作为事件参数构造函数参数引发PropertyChanged事件。在这种情况下,使用ObservableCollection对您没有帮助,因为您不会更改集合,而是替换它。如果您需要 的代码示例,请告诉我们