【问题标题】:WPF: Update Listbox automatically C#WPF:自动更新列表框 C#
【发布时间】:2011-02-28 08:05:45
【问题描述】:

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

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

【问题讨论】:

    标签: c# wpf listbox refresh


    【解决方案1】:

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

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

    因此,只要数据类中的某些内容发生更改(即添加/删除/更新),它就会触发 OnPropertyChanged 事件。 用于填充列表的 List 或 ObservableCollection 会侦听此 OnPropertyChanged 事件,并会在触发事件时自行更新。

    【讨论】:

      【解决方案2】:

      尝试使用 INotifyPropertyChanged 来实现。

      【讨论】:

      • 谢谢,我还是 C# 和 WPF 的新手,所以我会创建一个实现 INotifyPropertyChanged 的​​新类吗?我将如何使用它将列表框连接到数据库?
      • 关于将列表框连接到数据库的问题;您可以在同一个数据类中创建/更新/删除/列表方法,这些方法将与您的数据库交互并更新数据类中的属性(导致 OnPropertyChanged 触发)。
      【解决方案3】:
      surfaceListBox1.Items.Refresh();
      

      【讨论】:

        猜你喜欢
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-25
        • 1970-01-01
        相关资源
        最近更新 更多