2

我正在为一个应用程序使用 mvvm 模式,该应用程序使用实体框架版本 4 从 sql ce 数据库获取数据。WPF 应用程序只有一个视图(不再需要,因为应用程序不是那么大)。我通过在我的视图模型中创建一个 observablecollection 并绑定它,在列表框中显示来自数据库的属性集合。这完全符合预期。问题是我现在有另一个列表框(在同一视图中),需要为每个属性填充图像。需要明确的是,每个属性都有一堆图像,但每个图像只分配给一个属性。

显示图像的最佳方式是什么,我想可能会为图像创建另一个 observablecollection,但我不确定如何确保只显示适当属性的图像。或者我应该简单地将列表框绑定到每个属性(房屋)的图像属性?

干杯

    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");
    } 
4

1 回答 1

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

会成功的。

于 2012-04-16T22:33:45.553 回答