2010-06-06 3 views
0

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

Это код ListBox:

<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 и код для заполнения ListBox является:

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.

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

ответ

1

Попробуйте сделать это с помощью функции INotifyPropertyChanged.

+0

Спасибо, я все еще новичок в C# и WPF, так что бы создать новый класс, который реализует INotifyPropertyChanged? Как я могу использовать это для подключения списка к базе данных? – Ashley

+0

Что касается вашего вопроса о подключении списка к базе данных; Вы можете иметь в том же классе данных свои методы create/update/delete/list, которые будут взаимодействовать с вашей базой данных и обновлять свойства в вашем классе данных (в результате чего OnPropertyChanged срабатывает). –

3

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

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

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

Смежные вопросы