我应该使用一个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); 

会做的伎俩。

+0

我想我需要使用可观察的集合,但如果我错了,请纠正我。我的程序需要能够删除,添加和拖放n个单独的图像。只有相应属性的图像才能显示在此框中。我发现难以实现这一点的时候,是我已经添加并将图像分配给可观察集合中的一个属性对象(然后可将其保存到数据库中)。我知道我可以通过将列表框绑定到图像列表来显示它,但我需要能够检查当前选择的图像,以便能够将其删除等。 – randomalbumtitle 2012-04-17 05:17:45

+0

请参阅编辑。在你的情况下,因为你会单独添加/删除图像,你是正确的 - 你需要使用ObservableCollection。要跟踪选择哪个图像,我已将SelectedIndex属性添加到ViewModel。你可以将它绑定到(例如)一个WPF ListBox的SelectedIndex属性来跟踪当前选择哪一个。 – Doug 2012-04-18 21:01:00