在MVVM中重新分配新模型 - >不更新子集合视图模型

时间:2014-12-06 01:30:16

标签: c# wpf mvvm data-binding model-binding

我有一个根模型~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)
}

0 个答案:

没有答案