2012-04-16 19 views
2

Entity Frameworkバージョン4を使用してSQL Serverデータベースからデータを取得するアプリケーションにmvvmパターンを使用しています。WPFアプリケーションには1つのビューしかありません。アプリはそれほど大きくない)。私はリストボックス内のデータベースからプロパティのコレクションを表示しています、私のviewmodelにobservablecollectionを作成し、これをバインドします。これは期待どおりに動作します。問題は、私は今、別のリストボックス(同じビュー内に)それぞれのプロパティのためにImagesを配置する必要があるということです。明らかにするために、各プロパティには一連のイメージがありますが、各イメージは1つのプロパティにのみ割り当てられます。イメージに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()を呼び出すのを忘れないでください

またそれのObservableCollectionに注意してくださいコンテンツを1つずつ操作していない場合は何もしません。すべてを一括して更新しているのであれば、目に見えるメリットはありません。

もう一つ - あなたはすべてのあなたの特性が変更されたことを通知する必要がある場合:

RaisePropertyChanged(null); 

は、トリックを行います。

+0

私は観察可能なコレクションを使用する必要があると思うが、私が間違っている場合は私を修正してください。私のプログラムは、個々の画像を削除、追加、ドラッグすることができる必要があります。このボックスには、適切なプロパティのイメージのみが表示されます。これを実装するのが難しいと思っているところでは、私は既にobservableコレクション内のプロパティオブジェクトにイメージを追加して割り当てました(データベースに保存することができます)。リストボックスをイメージのリストにバインドするだけで表示できることは分かっていますが、現在選択されているイメージを確認して削除できるようにする必要があります。 – randomalbumtitle

+0

編集を参照してください。あなたのケースでは、個別に画像を追加/削除するので、あなたは正しい - ObservableCollectionを使用する必要があります。どのイメージが選択されているかを追跡するため、ViewModelにSelectedIndexプロパティを追加しました。これを(たとえば)WPF ListBoxのSelectedIndexプロパティにバインドして、現在選択されているものを追跡することができます。 – Doug

関連する問題