![](/img/trans.png)
[英]wpf xaml MVVM inheritance with multiple ContentPresenter
[英]C# WPF MVVM XAML: Using ContentPresenter Style to display ViewModel
因此,我要为正在处理的应用程序显示一系列页面,但我想首先在另一个ViewModel中仅显示带有ContentPresenter的ViewModel。 我可以使用以下方法使其工作:
<ContentPresenter>
<ContentPresenter.Content>
<connection:ConnectionSelectPage />
</ContentPresenter.Content>
</ContentPresenter>
我想使用样式使其更高级,因为我将需要能够基于DataTrigger切换显示哪个Viewmodel。 在研究DataTriggers和多个ViewModel之前,我已经以此为起点,我想简单地执行与上述代码完全相同的功能:
<ContentPresenter>
<ContentPresenter.Resources>
<Style x:Key="ConnectPage">
<Setter Property="ContentPresenter.Content">
<Setter.Value>
<connection:ConnectionSelectPage />
</Setter.Value>
</Setter>
</Style>
</ContentPresenter.Resources>
</ContentPresenter>
这个新代码在应用程序中不显示任何内容,我感到困惑,因为从我对XAML和WPF的了解来看,这两个代码块应该是相同的。 我想念什么吗?
只需将您的内容演示者设置为内容绑定到主视图模型中的page属性即可。
<ContentPresenter Content='{Binding CurrentPage}' />
...其中CurrentPage是'object'类型的,或者更好的是,您在所有页面视图模型中使用的一些基类。 然后,您仅使用数据模板来指示应如何为每种页面类型填充ContentPresenter:
<DataTemplate DataType="{x:Type Page1ViewModel}">
<views:Page1UserControl />
</DataTemplate>
<DataTemplate DataType="{x:Type Page2ViewModel}">
<views:Page2UserControl />
</DataTemplate>
... etc ...
只要CurrentPage属性支持属性更改通知,只要您更改其值,子视图就将自动更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.