我有一个根模型~PropertyPortfolio~我从XML文件保存/加载。它包含Property对象的子集合。
当我加载应用程序时,我将此对象加载到PropertyPortfolioService中。该模型使用INotifyPropertyChanged,服务也是如此 - 所以我已经覆盖了它。
我有一个子视图,它在网格中显示Property对象的子集合。绑定工作正常。
我遇到的问题是:
当我从文件中打开一个新的PropertyPortfolio时,我在服务中重新分配了PropertyPortfolio对象:
this.PropertyPortfolio = loadedPropertyPortfolio;
子视图/ viewmodel不会更新。
我目前的解决方案是加载新的产品组合并重新创建子对象,如下所示:
PropertyPortfolio loadedPropertyPortfolio = /* Code to load new portfolio from XML */;
this.PropertyPortfolio.Properties.Clear();
foreach (var property in loadedPropertyPortfolio.Properties)
{
this.PropertyPortfolio.Properties.Add(property);
}
我正在寻找更好的解决方案。
我希望这个描述性足够吗?
更多信息 - 问题在于PropertyViewModel(包含Property模型对象和IsSelected逻辑)。
这是单个Property的VM(对于集合中的每个Property):
公共类PropertyViewModel { 公共财产 { 得到{return this.property; } }
public bool IsSelected
{
get { return this.isSelected; }
set
{
SetProperty(ref this.isSelected, value, () => IsSelected);
}
}
public PropertyViewModel(Property property)
{
this.Property = property;
}
// Other code (fields etc)
}
这是Properties视图(包含网格)的视图模型:
public class PropertiesViewModel : ViewModelBase
{
public ObservableCollection<PropertyViewModel> PropertyVMs
{
get { return this.propertyVMs; }
}
public PropertiesViewModel(PropertyPortfolio propertyPortfolio)
{
Func<Property, PropertyViewModel> viewModelCreator = model => new PropertyViewModel(model);
this.propertyVMs = new ObservableViewModelCollection<PropertyViewModel, Property>(propertyPortfolio.Properties, viewModelCreator);
}
// Other code (fields etc)
}