【发布时间】:2013-06-27 12:08:17
【问题描述】:
以下是我真正想做的简化示例,但我的问题是一样的。
假设我有两个对象,男人和女人,它们都具有相同的属性(年龄、身高和体重),但它们是两个不同的对象。我无法改变这一点。
现在假设我有一个 WPF 面板,它使用 MVVM 原理在文本框中显示某个人的年龄。为此,我使用 Text="{Binding Path=OnePerson.Age}" ,其中 OnePerson 是视图模型中定义的 Man 类型的对象。
这很好用,但我想要一个类似的页面来显示这个女人的信息。理想情况下,我只想使用与以前相同的视图和视图模型。但这很棘手,因为数据绑定指向 Man-object OnePerson。我可以以编程方式更改数据绑定(如WPF Binding Programatically 中所述),但我只能从视图的代码隐藏中这样做。我不允许这样做,因为我们使用的是 MVVM 模型。
我想让 OnePerson 引用一个 Man 或 Woman 对象,但我不知道这样做的好方法。它们是不同的类型,所以我不能只使用 if 语句来分配男人或女人。我可以将 OnePerson 声明为对象而不是类型,但是我不能再如此轻松地访问 Age、Height 和 Weight 属性。或者我可以制作一个完全不同的 ViewModel,其中一个将 OnePerson 声明为男人,另一个声明为女人,并为他们两个使用相同的 View。我认为这应该可行,但是对于一个视图有两个视图模型似乎有点奇怪。添加我自己的 Person 类并在它与 Man 或 Woman 之间进行转换可能只会使整个视图模型变得相当复杂,当我开始添加诸如添加新的 Man/Woman 或编辑现有的功能时,我可能会好吧,复制粘贴 Man 视图和视图模型,然后仅将 OnePerson 对象更改为 Woman。
我的问题是,在这种情况下,是否有一种干净简单的方法可以使用单个 View 和 Viewmodel 来显示男人或女人的信息。还是我不应该为这些案例烦恼并单独制作页面?
希望这已经足够清楚了。
【问题讨论】:
标签: c# wpf xaml data-binding mvvm