私はMVVMを使い始めており、誰かが私を助けてくれることを願っています。私は2つのリストボックスで簡単なビューを作成しようとしています。最初のリストボックスから選択すると、2番目のリストボックスが表示されます。私はバインドしたい情報を保存するクラスを作成しました。ObservableCollectionが更新されていませんView
MyObjectにクラスは、私は私が持っている2 ObservableCollectionsはViewModelに私のコンストラクタで
public ObservableCollection<EMSMenuItem> Level1MenuItems { get; set; }
public ObservableCollection<EMSMenuItem> Level2MenuItems { get; set; }
を作成している私のviewmodelで
public class MyObject : ObservableObject
{
String _name = String.Empty;
ObservableCollection<MyObject> _subcategories;
public ObservableCollection<MyObject> SubCategories
{
get { return _subcategories; }
set
{
_subcategories = value;
RaisePropertyChanged("SubCategories");
}
}
public String Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
public MyObject()
{
_subcategories = new ObservableCollection<EMSMenuItem>();
}
}
(被監視オブジェクトはINotifyPopertyChangedを実装だけで、基本クラスである):
this.Level1MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level2MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level1MenuItems = LoadEMSMenuItems("Sample.Xml");
レベル1の項目で問題ないビューに正しく表示されます。これは2番目のリストボックスのUIを更新していないいくつかの理由について
Level2MenuItems = ClickedItem.SubCategories;
:しかし、私は、ユーザーが次のように持って、リストボックス内の項目を、クリックしたときに呼び出されるコマンドを持っています。この場所にブレークポイントを置くと、Level2MenuItemsに正しい情報が格納されていることがわかります。 foreachループを作成してLevel2MenuItemsコレクションに個別に追加すると、正しく表示されます。
Level2MenuItems = Level1MenuItems[0].SubCategories;
そして、それが正しく更新:私は、コンストラクタに以下を追加テストなども
。
なぜ、コードはコンストラクタ内で、またはループスルー時には期待どおりに動作しますが、ユーザがリストボックス内の項目をクリックしたときにはどうしてですか?
感謝。正確に私が必要としたもの。 –