WPF: автоматически обновлять список C # - PullRequest
0 голосов
/ 06 июня 2010

У меня есть два окна WPF, разработанные с использованием поверхностного SDK, одно из которых представляет собой форму ввода данных, а второе отображает данные в списке. Окно списка отображает данные идеально, но когда я добавляю новую запись, используя форму ввода данных, список не обновляется, пока я не открою окно. Есть ли способ автоматически обновить список через привязку или что-то?

Это код списка:

    <s:SurfaceListBox Height="673" Margin="0,26,0,31" Name="surfaceListBox1" ItemsSource="{Binding Path={}}" Width="490">
        <s:SurfaceListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Label Width="80" FontSize="8" Content="{Binding Path=item1}"></Label>
                    <Label Width="80" FontSize="8" Content="{Binding Path=item2}"></Label>
                    <Label Width="210" FontSize="8" Content="{Binding Path=item3}"></Label>
                    <Label Width="80" FontSize="8" Content="{Binding Path=item4}"></Label>
                    <Label Width="60" FontSize="8" Content="{Binding Path=item5, Converter={StaticResource booleanconverter}}"></Label>
                </StackPanel>
            </DataTemplate>
        </s:SurfaceListBox.ItemTemplate>
    </s:SurfaceListBox>

Я использую Visual C # 2008 и код для заполнения списка:

    private SHIPS_LOGDataSet ShipData = new SHIPS_LOGDataSet();
    private SHIPS_LOGDataSetTableAdapters.MAINTableAdapter taMain = new SHIPS_LOGDataSetTableAdapters.MAINTableAdapter();
    private SHIPS_LOGDataSetTableAdapters.TableAdapterManager taManager = new ShipsLogSurface.SHIPS_LOGDataSetTableAdapters.TableAdapterManager();

    private void SurfaceWindow_Loaded(object sender, RoutedEventArgs e)
    {
        this.taMain.Fill(this.ShipData.MAIN);
        this.DataContext = from MAIN in this.ShipData.MAIN orderby MAIN.MESSAGE_ID descending select MAIN;

    }

Единственная таблица в моей базе данных называется MAIN.

Полагаю, мне, возможно, придется использовать представление коллекции или подобное, но я не знаю, как это реализовать. Любые идеи будут высоко оценены. Спасибо

Ответы [ 3 ]

3 голосов
/ 06 июня 2010

INotifyPropertyChanged - это интерфейс, который вы должны реализовать в своем классе данных (ShipData?). Свойства в вашем классе данных должны выглядеть следующим образом:

private string _myField;
public string MyField { 
    get { return _myField; } 
    set { _myField = value; onPropertyChanged(this, "MyField"); } 
}

Таким образом, всякий раз, когда что-то в вашем классе данных изменяется (т.е. добавляется / удаляется / обновляется), оно запускает событие OnPropertyChanged. Ваш List или ObservableCollection, которые вы используете для заполнения списка, прослушивает это событие OnPropertyChanged и будет обновляться при каждом возникновении события.

1 голос
/ 23 февраля 2011
surfaceListBox1.Items.Refresh();
1 голос
/ 06 июня 2010

Попробуйте сделать это с INotifyPropertyChanged.

...