我应该使用一个ObservableCollection的图像
问题描述:
我正在使用实体框架版本4从一个sql ce数据库中获取数据的应用程序使用mvvm模式。该WPF应用程序只有一个视图(不再需要作为应用程序不是那么大)。我通过在viewmodel中创建一个observablecollection并绑定它,在数据库中显示一个属性集合。这完全按照预期工作。问题是我现在有另一个列表框(在相同的视图中),需要为每个属性填充图像。要清楚,每个属性都有一堆图像,但每个图像只分配给一个属性。我应该使用一个ObservableCollection的图像
什么是最好的方式来显示图像,我想也许为图像创建另一个observablecollection,但我不知道如何确保只显示相应属性的图像。或者我应该简单地将列表框绑定到每个属性(房子)的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");
}
答
听起来像明显不同的责任(主/详细视图)。在MVVM的精神我想创建一个新的视图和新的视图模型 - 也许是:
PropertyImagesViewModel
- public Property Property { get; set; }
- public IList<Image> Images { get; set; }
- public int SelectedIndex { get; set; }
PropertyImagesView
不要忘了打电话给RaisePropertyChanged()在每个属性setter的
还要注意的是的ObservableCollection如果您不是一次一个地操作内容,则什么也不做。如果你全部都是一次更新整个系列,那么它就不会给你带来实实在在的好处。
另一件事 - 如果你需要通知你的所有属性改为:
RaisePropertyChanged(null);
会做的伎俩。
我想我需要使用可观察的集合,但如果我错了,请纠正我。我的程序需要能够删除,添加和拖放n个单独的图像。只有相应属性的图像才能显示在此框中。我发现难以实现这一点的时候,是我已经添加并将图像分配给可观察集合中的一个属性对象(然后可将其保存到数据库中)。我知道我可以通过将列表框绑定到图像列表来显示它,但我需要能够检查当前选择的图像,以便能够将其删除等。 – randomalbumtitle 2012-04-17 05:17:45
请参阅编辑。在你的情况下,因为你会单独添加/删除图像,你是正确的 - 你需要使用ObservableCollection。要跟踪选择哪个图像,我已将SelectedIndex属性添加到ViewModel。你可以将它绑定到(例如)一个WPF ListBox的SelectedIndex属性来跟踪当前选择哪一个。 – Doug 2012-04-18 21:01:00