我应该使用ObservableCollection图像

时间:2012-04-16 22:25:24

标签: c# wpf binding mvvm

我正在使用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");
    } 

1 个答案:

答案 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);

会做到这一点。