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