2

Entity Framework バージョン 4 を使用して SQL ce データベースからデータを取得するアプリケーションに mvvm パターンを使用しています。WPF アプリケーションにはビューが 1 つしかありません (アプリがそれほど大きくないため、もう必要ありません)。ビューモデルで観察可能なコレクションを作成し、これをバインドすることにより、データベースのプロパティのコレクションをリストボックスに表示しています。これは期待どおりに機能します。問題は、各プロパティの画像を入力する必要がある別のリストボックス (同じビュー内) があることです。明確にするために、各プロパティには多数の画像がありますが、各画像は 1 つのプロパティにのみ割り当てられます。

画像を表示する最良の方法は何でしょうか。画像用に別の観察可能なコレクションを作成することも考えましたが、適切なプロパティの画像のみが表示されるようにする方法がわかりません。それとも、リストボックスを各プロパティ (家) の 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");
    } 
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() を呼び出すことを忘れないでください。

また、一度に 1 つずつコンテンツを操作していない場合、ObservableCollection は何もしないことに注意してください。コレクション全体を一度に更新するだけでは、目に見えるメリットはありません。

もう 1 つ - すべてのプロパティが変更されたことを通知する必要がある場合:

RaisePropertyChanged(null);

トリックを行います。

于 2012-04-16T22:33:45.553 に答える