我在谷歌上四处查看,无法找出显示此数据的正确协议(protocol)。
我的应用程序在两个不同的 View ( Canvas 和 TreeView )中并排显示相同的核心数据,但每个 View 都需要不同的布局。 Canvas 仅使用平面 ObservableList 在屏幕上显示用户对象。 TreeView 将提供该数据的分类列表。由于一个 View 中需要层次结构而不是另一个 View ,创建额外的 View 模型来包装数据是否有意义?
我想尽可能多地重用 View 模型,但想避免创建任何“神”类。
例子:
Canvas:
- - - - - - - - - - - - - - -
| Person1 Person2 |
| Person3 Person4 |
- - - - - - - - - - - - - -
TreeView:
People:
-Adults
-Person1
-Person4
-Children
-Person2
-Teens
-Person3
对不起,糟糕的绘图。
最佳答案
@JMcCarty 你让我解释我上面的评论,但评论太多了
你会得到你的 ObservableCollection<People>
来自您的数据源,并通过 Canvas 的一个公共(public)属性公开它。然后,您将为 TreeView 创建第二个公共(public)属性,并将您的 People 集合解析到其中。
像这样:
public class PeopleTreeItem
{
public string Header;
public ObservableCollection<object> Items;
public PeopleTreeItem(string header, IEnumerable<object> items)
{
Header = header;
Items = new ObservableCollection<object>() { items };
}
}
public class SomeViewModel : ViewModelBase
{
private ObservableCollection<Person> _peopleList;
private PeopleTreeItem _peopleTree;
public ObservableCollection<Person> PeopleList
{
get { return _people; }
}
public PeopleTreeItem PeopleTree
{
get
{
if (_peopleTree == null)
{
_peopleTree = new PeopleTreeItem();
_peopleTree.Add(new PeopleTreeItem("Adults", PeopleList.Where(p => p.Type == "Adult")));
_peopleTree.Add(new PeopleTreeItem("Teens", PeopleList.Where(p => p.Type == "Teen")));
_peopleTree.Add(new PeopleTreeItem("Children", PeopleList.Where(p => p.Type == "Child")));
}
return _people;
}
}
关于c# - 使用不同显示技术在两个 View 中显示数据的 MVVM 的正确实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6748171/