繁体   English   中英

C#WPF MVVM XAML:使用ContentPresenter样式显示ViewModel

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM