2012-04-16 18 views
2

我正在使用實體框架版本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"); 
    } 

回答

2

聽起來像明顯不同的責任(主/詳細視圖)。在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

相關問題