3

データ アクセス レイヤーに多対多の関係があるとします (CodeFirst - EF を使用)。

public class Report{
   public int ReportId {get;set;}
   public string ReportName {get;set;}
   public List<ReportKeyword> ReportKeywords {get;set;}
}

public class ReportKeyword{
   public int ReportId {get;set;}
   public int KeywordId {get;set;}
}

public class Keyword{
   public int KeywordId {get;set;}
   public string KeywordName {get;set;}
   public List<ReportKeyword> ReportKeywords {get;set;}
}

レポートのリストビューを表示するユーザー インターフェイス (WPF ビュー) を作成する必要があり、各レポートはそのキーワードの子リスト ビューを表示する必要があります。したがって、これはViewModelで簡単に実行できますが、この目的のためにViewModelをモデル化する最良の方法は何ですか. 必要なプロパティを備えた VM を作成する必要がありますか? これは、Keywords のコレクションを含む、レポート オブジェクトから表示したいすべての同様のプロパティを持つ ReportViewModel です。

public class ReportViewModel : ViewModelBase<ReportViewModel>
{
    private string _reportName;
    public string ReportName
    {
        get { return _reportName; }
        set
        {
            _reportName = value;
            NotifyPropertyChanged(model => model.ReportName);
        }
    }
    private ObservableCollection<Keyword> _keywords;
    public ObservableCollection<Keyword> Keywords
    {
        get { return _keywords; }
        set
        {
            _keywords = value;
            NotifyPropertyChanged(model => model.Keywords);
        }
    }

}

少し退屈な気がします。コレクションを作成してグリッドに表示するにはどうすればよいですか? レポートが選択されたときに、Keywords コレクションを設定するメソッドを呼び出す必要がありますか? このシナリオのより良い解決策はありますか?

4

1 に答える 1

0

私の個人的な意見では、あなたはすでにほとんどそこにいるようです. ただし、既にあるオブジェクトのコレクションではなく、コレクション コントロールのプロパティにバインドするReport型の単一のプロパティであるオブジェクトのコレクションをビュー モデルに提供します。ReportSelectedItemKeyword

このビュー モデルでは、プロパティをビュー内の にバインドし、プロパティをReportsプロパティにバインドして、ユーザーがさまざまなレポート オブジェクトを選択できるようにします。次に、選択したオブジェクトのプロパティをビュー内の別のオブジェクトにバインドするだけです。ListBox.ItemsSourceReportListBox.ItemsSourceReportKeywordsReportListBox

<ListBox ItemsSource="{Binding Reports/ReportKeywords}" />

ReportKeywordsこれは、現在のコレクション、または他の で選択されたアイテムにバインドする必要がありListBoxます。

于 2013-09-03T15:23:36.843 に答える