2

我对 ListBox 有一点问题。如果我通过代码添加一个项目,因为它:

ListBox1.Items.Add(new MyData());
<ListBox Name="ListBox1" Height="Auto"
                    Style="{DynamicResource MyListBoxStyle}"/>

我的 ListBox 什么也不显示,而 Items 包含我添加的大量项目。

但是,如果我将一个项目直接放在我的 XAML 和 c# 中,MyData 会正确显示:

ListBox1.Items.Add(new MyData());
<ListBox Name="ListBox1" Height="Auto"
                    Style="{DynamicResource MyListBoxStyle}">
                            <data:MyData/>
                        </ListBox>

任何人都知道如果我没有将项目放入我的 XAML 中为什么它不能正确显示,以及如何纠正它?

先感谢您 :)


[已解决] 添加项目时,我的 ListBox 已显示。所以要解决这个问题,只需要求更新布局以通知 ItemSource 已更改:

ListBox1.UpdateLayout();
4

1 回答 1

2

我认为这是因为 ListBox1.Items 集合没有实现 INotifyPropertyChanged/INotifyCollectionChanged。您可以创建一个可观察的集合并将其分配给 ItemSource。

ObservableCollection<MyData> items = new ObservableCollection()

items.Add(new MyData());

ListBox1.ItemSource = items;

您没有看到它添加的原因是列表框已经创建/填充,并且当您在 Items 属性上调用 .Add 方法时,Items 的集合不会通知列表框。

于 2013-08-08T11:08:03.060 回答