我刚开始使用MVVM并遇到了障碍,我希望有人可以帮助我.我正在尝试使用2个列表框创建一个简单的视图.第一个列表框中的选择将填充第二个列表框.我创建了一个类,用于存储我想要绑定的信息.
MyObject类(Observable Object只是一个实现INotifyPopertyChanged的基类)
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>();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的viewmodel中,我创建了两个ObservableCollections
public ObservableCollection<EMSMenuItem> Level1MenuItems { get; set; }
public ObservableCollection<EMSMenuItem> Level2MenuItems { get; set; }
Run Code Online (Sandbox Code Playgroud)
在我的ViewModel的构造函数中,我有:
this.Level1MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level2MenuItems = …Run Code Online (Sandbox Code Playgroud) public class Alpha
{
public ObservableCollection<Beta> Items { get; set; }
public Alpha()
{
Items = new ObservableCollection<Beta>();
}
public void DoSomething()
{
Items = GetNewItems(); // whenever I do this, Items gets a new referene,
// so every WPF binding (e.g. datagrids) are broken
}
public ObservableCollection<Beta> GetNewItems()
{
var ret = new ObservableCollection<Beta>();
// some logic for getting some items from somewhere, and populating ret
return ret;
}
}
Run Code Online (Sandbox Code Playgroud)
如何Items用GetNewItems()不带的返回值替换整个内容:
打破绑定.
必须遍历项目并将它们一个一个地复制到另一个集合中?