WPF MVVM View / UserControl继承还是类似的概念?

时间:2017-06-13 05:34:33

标签: wpf xaml mvvm caliburn.micro view-inheritance

我正在构建WPF应用程序并将caliburn.micro用于MVVM。 我有几十个观看次数(UserControls)。

视图有一个标题正文和页脚。 如下图所示,标题包含两个用于crud操作的按钮,页脚包含一个状态栏。

Sample View

所有视图的页眉和页脚部分都是相同的,但是视图的正文内容将不同。 目前我已经为每个视图重复了标题和正文代码,现在我试图消除重复代码。

为实现这一目标,我想制作一个共同的基本视图,与所有其他观点分享。

当前实施

<UserControl
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <StackPanel>
      <Grid Name="Header/>"
      <Grid Name="Body/>"
      <Grid Name="Footer/>"
   </StackPanel>
</UserControl>

尝试实现

之类的内容

基本视图

<UserControl
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <StackPanel>
      <Grid Name="Header/>"
      <!-- {Placeholder for child view} -->
      <Grid Name="Footer/>"
   </StackPanel>
</UserControl>

ChildView

<Grid Name="Body"/> 

可能是我的做法错了(我对WPF来说是新手)。

我的目标是通过在视图中继承一些控件来消除重复代码。

如何将基本视图与子视图结合使用? 谁能建议我达到我的要求? 提供一些代码示例将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

例如,您可以在父窗口中定义公共页眉和页脚,或者在父窗口的XAML标记中创建两个单独的用户控件,然后使用{将子视图注入到同一窗口中{1}},例如:

ContentControl

子视图对页眉和页脚没有任何了解。

答案 1 :(得分:0)

您可以嵌套UserControl,就像嵌套任何其他元素一样,这样就可以做到这样的事情

<UserControl x:Name="HeaderControl">
    <UserControl x:Name="ChildControl"/>
</UserControl>

然后,您在标题控件中使用DependencyProperty将您的子控件与此类关联起来

public UserControl ChildControl
{
    get { return (UserControl)GetValue(ChildControlProperty); }
    set { SetValue(ChildControlProperty, value); }
}

public static readonly DependencyProperty ChildControlProperty =
    DependencyProperty.Register("Text", typeof(UserControl), typeof(UserControl), new PropertyMetadata(null));

This文章提供了一个很好的概述 - 我知道它说的是Silverlight,但它使用相同的基本方法。