我有两个使用表面SDK开发的WPF窗口,一个是数据输入表单,第二个是在列表框中显示数据。列表框完美地显示数据,但是当我使用数据输入表单添加新记录时,在重新打开窗口之前,列表框不会更新。有没有办法通过绑定或其他东西自动更新列表框?
这是列表框代码:
<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。
我猜我可能不得不使用集合视图或类似但不知道如何实现它。任何想法将不胜感激。感谢
答案 0 :(得分:3)
INotifyPropertyChanged是一个应该在数据类中实现的接口(ShipData?)。数据类中的属性应如下所示:
private string _myField;
public string MyField {
get { return _myField; }
set { _myField = value; onPropertyChanged(this, "MyField"); }
}
因此,只要数据类中的某些内容发生更改(即添加/删除/更新),它就会触发OnPropertyChanged事件。 用于填充列表的List或ObservableCollection将侦听此OnPropertyChanged事件,并在事件触发时自行更新。
答案 1 :(得分:1)
尝试使用INotifyPropertyChanged。
答案 2 :(得分:1)
surfaceListBox1.Items.Refresh();