【发布时间】:2014-07-25 18:58:30
【问题描述】:
我有一个 C# 项目,其中有一个 ListBox 作为其用户界面的一部分。此 ListBox 用于显示多个项目名称。我还有一些选项可以根据对数据库的查询(所有项目、不完整、完整等)更改此 ListBox 的大小。
我还有一个标签,用于显示 ListBox 内的结果数量。我希望找到一种方法在每次列表更改时自动执行此操作,而不是在我更改列表的每一行代码中。
我尝试过使用 DataSourceChanged 事件,但这带来了一个非常有趣的问题。在 ListBox 实际填充新值之前触发该事件。例如,在程序开始时,我将 ListBox 的数据源设置为一组 100 个项目。然后,触发 DataSourceChanged 事件,我调用 listBox1.Items.Count.ToString() 来获取值,它返回 0。同样,因为列表框尚未填充。所以我会有一个显示 0 的标签和一个包含 100 个项目的列表框。
现在,如果我将其缩小到不完整的项目(例如,计数为 50),当事件被触发时,它将返回值 100。这是因为不完整的项目没有t 自数据源更改以来尚未填充。所以,我将有一个标签,上面写着 100,但列表框只有 50 个项目。
还有其他我可以使用的事件吗? DataSourceChanged 事件是否有任何参数可以让我查看待处理的数据源以获取计数?或者我真的应该在我的代码中找到每个更改列表框并在那里更新标签的实例。
【问题讨论】:
-
使用
ObservableCollection<T>绑定ItemsSource,它会自动向UI提供更新通知。 -
-
WPF 与事件无关。您使用的是完全错误的方法。 WPF 是关于 XAML 和 DataBinding,而不是过程代码。只需执行
<TextBox Text="{Binding Items.Count, ElementName=YourListBox}"/>即可。不需要可怕的类似 winforms 的黑客攻击。 -
感谢你们的好主意。不幸的是(好吧,对我来说很幸运)这周我不在办公室度假,这是一个工作项目,源代码仍在我的桌面上。如果有人有兴趣回来查看,将在一周内返回结果。