2010-06-06 48 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事件,並在事件觸發時自動更新。