我们说我有一堆小猫。也许我有一个KittenViewModel。我想在卡片视图中将其显示为小猫卡片,但也可以在列表视图中分解为列。 MvvmCross是否支持将KittenViewModel绑定到多个视图?我应该有多个ViewModel引用回一个模型吗?
答案 0 :(得分:0)
免责声明:我知道我正在回答一个您可能已经忘记的老问题;这是给后代的。另外,我对MVVM设计模式的了解有限。我记得在某个地方读过Views和ViewModels通常是一对一的对应关系,因此常规答案可能是“您不应该这样做。请重新考虑您的设计。”
话虽如此,我最近在这个问题上苦苦挣扎了一段时间,然后提出了一个非常简单的解决方案,该解决方案可以在以下假设下运行:(1)您希望在两个单独的视图中使用完全相同的ViewModel实例; (2)无论出于何种原因,您都不能使用DataTemplateSelector
来确定要使用哪个视图; (3)您不介意为同一个ViewModel创建多个视图。
解决方案是为KittenViewModel
定义单独的数据模板,作为要用于显示数据的任何控件的资源。例如,如果您创建了KittenCardView
用户控件并打算将其显示在ContentControl
中,则可以在DataTemplate
资源中设置ContentControl
,例如:< / p>
<ContentControl>
<Control.Resources>
<DataTemplate DataType="{x:Type viewmodel:KittenViewModel}">
<view:KittenCardView/>
</DataTemplate>
</Control.Resources>
</ContentControl>
KittenColumnView
(或您所说的任何东西)将以类似的方式处理。如果通常将其中一个视图仅在特殊情况下需要使用另一个视图,则可能会发现将其中一个视图定义为窗口或应用程序资源很有帮助。