我正在使用mvvm模式用于使用Entity Framework版本4从sql ce数据库获取其数据的应用程序.WPF应用程序只有一个视图(不再需要,因为应用程序不是那么大)。我在列表框中显示数据库中的一组属性,方法是在我的viewmodel中创建一个observablecollection并绑定它。这完全符合预期。问题是我现在有另一个列表框(在同一视图中),需要使用每个属性的Images填充。要清楚,每个属性都有一堆图像,但每个图像只分配给一个属性。
显示图像的最佳方式是什么,我想可能会为图像创建另一个observablecollection,但我不确定如何确保只显示相应属性的图像。或者我应该只将列表框绑定到每个属性(house)的Images属性?
干杯
private void Load()
{
PropertyList = new ObservableCollection<Property>((from property in entities.Properties.Include("Images")
select property));
propertyView = CollectionViewSource.GetDefaultView(PropertyList);
if (propertyView != null)
propertyView.CurrentChanged += new System.EventHandler(propertyView_CurrentChanged);
RaisePropertyChanged("CurrentContact");
RaisePropertyChanged("SaleTitle");
RaisePropertyChanged("Address");
RaisePropertyChanged("AuctioneerName");
RaisePropertyChanged("AgentName");
RaisePropertyChanged("Price");
RaisePropertyChanged("NextBid");
RaisePropertyChanged("Status");
}
答案 0 :(得分:2)
这听起来很像一个不同的责任(主/细节视图)。在MVVM的真正精神中,我创建了一个新的View和一个新的ViewModel - 也许是:
PropertyImagesViewModel
- public Property Property { get; set; }
- public IList<Image> Images { get; set; }
- public int SelectedIndex { get; set; }
PropertyImagesView
不要忘记在每个属性设置器中调用RaisePropertyChanged()
另请注意,如果您不是一次一个地操作内容,则ObservableCollection不会执行任何操作。如果所有这些都是一次性更新整个集合,那么它不会带来任何实际好处。
另一件事 - 如果您需要通知所有属性已更改:
RaisePropertyChanged(null);
会做到这一点。