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 に答える