鉴于我的数据访问层(使用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 View),每个报告都应显示其关键字的子列表视图。因此,这可以在ViewModel中轻松完成,但为此目的建模ViewModel的最佳方法是什么。我是否需要创建具有必要属性的VM?这是一个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);
}
}
}
我觉得它有点单调乏味。如何填充要在网格上显示的集合?是否应该在选择报告时调用设置关键字集合的方法?这种情况有更好的解决方案吗?
答案 0 :(得分:0)
在我个人看来,你似乎已经在那里了。但是,我将为视图模型提供一组Report
个对象,一个类型为Report
的属性,以绑定到集合控件的SelectedItem
属性,而不是Keyword
的集合。 1}}你已经拥有的对象。
使用此视图模型,我会将Reports
属性绑定到视图中的ListBox.ItemsSource
,将Report
属性绑定到ListBox.ItemsSource
属性,以便用户可以选择各种报告对象。然后,您只需将ReportKeywords
属性从选定的Report
对象绑定到视图中的另一个ListBox
:
<ListBox ItemsSource="{Binding Reports/ReportKeywords}" />
这应绑定到其他ReportKeywords
中当前或所选项目的ListBox
集合。