Как обновить поле со списком в списке в WPF? - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть ListBox, связанный с ObservableCollection, а внутри ListBox.ItemTemplate у меня есть ComboBox, связанный с другой ObservableCollection.

Мне нужно обновить эти ComboBox после сохранения данных ListBox.

Вот мой 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;
}

Я также пытался вручную перезагрузить эту коллекцию, но результат всегда один и тот же:

в ComboBox я никогда не найду новые элементы (которые, я уверен, есть)

что я делаю не так?

1 Ответ

3 голосов
/ 02 апреля 2012

Один из способов - реализовать интерфейс INotifyPropertyChanged в вашем UserControl (класс, который содержит определение SelectableKeyValues), а внутри метода RefreshData вызвать событие PropertyChanged с параметром SelectableKeyValues ​​в качестве параметра конструктора аргументов события.использование ObservableCollection не поможет вам в этом случае, потому что вы не меняете коллекцию, а заменяете ее.дайте нам знать, если вам нужны примеры кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...