2010-06-06 58 views
0

我有两个使用表面SDK开发的WPF窗口,一个是数据输入窗体,第二个显示列表框中的数据。该列表框完美地显示数据,但是当我使用数据输入表单添加新记录时,直到重新打开窗口,列表框才会更新。有没有办法通过绑定或其他方式自动更新列表框?WPF:自动更新列表框C#

这是列表框代码:

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

    } 

我的数据库中唯一的表被称为主。

我猜我可能不得不使用集合视图或类似的,但不知道如何实现。任何想法将不胜感激。谢谢

回答

1

试着用INotifyPropertyChanged做到这一点。

+0

谢谢,我还是新来C#和WPF,所以我会创建一个新类实现INotifyPropertyChanged?我将如何使用它将列表框连接到数据库? – Ashley 2010-06-06 08:22:58

+0

关于将列表框连接到数据库的问题; 您可以在相同的数据类中使用create/update/delete/list方法,这些方法将与您的数据库交互并更新数据类中的属性(导致OnPropertyChanged触发)。 – 2010-06-06 08:45:07

3

INotifyPropertyChanged是您应该在数据类(ShipData?)中实现的接口。在数据类的属性应如下所示:

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

因此,只要东西在你的数据类的变化(即添加/删除/更新),这将触发OnPropertyChanged事件。 您用于填充列表的List或ObservableCollection会侦听此OnPropertyChanged事件,并在事件触发时自动更新。