【发布时间】:2012-10-23 05:18:15
【问题描述】:
几天前我问过this question,但答案让我更加困惑。所以我会问一个更简单的问题:
(我使用的是 Caliburn.Micro,这是一个 WPF 应用程序)。假设您有一个 MainView/MainViewModel,它具有子 AView/AViewModel 和 BView/BViewModel。您的 MainView 是一个网格,并且是您希望使用 AView 或 BView 填充的单元格之一,具体取决于用户选择。如果我只想显示 AView,我会执行以下操作:
在主视图中:
<StackPanel Name="SP_Controls" VerticalAlignment="Bottom" Grid.Row="1" Grid.Column="0">
<ContentControl Name="ViewModelToShow" Margin="10" />
</StackPanel>
在 MainViewModel 中:
public AViewModel ViewModelToShow{get; set;}
我现在的幼稚想法是做这样的事情:
private AViewModel _AVM;
private BViewModel _BVM;
public ... ViewModelToShow{ get; set;}
然后在代码中,例如,将视图模型设置为显示:
ViewModelToShow = _BVM;
我唯一的问题是“...”,因为每个 ViewModel 都属于不同的类。有没有办法用泛型来做到这一点,或者我应该为我的 ViewModel 定义一个基类,然后将它们投射到其中?但如果我这样做,它们仍然会正确显示吗?谢谢。
【问题讨论】:
-
我不确定我是否完全理解您想要做什么。您的 VM 可以从 PropertyChangedBase 甚至 Screen 继承。我在这里有一些 WPF/CM 示例:bitbucket.org/dbeattie
标签: wpf mvvm caliburn.micro