WPF:自动更新列表框C#

时间:2010-06-06 07:54:19

标签: c# wpf listbox refresh

我有两个使用表面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。

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

3 个答案:

答案 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();