WPF:多个XAML文件共享相同的代码隐藏文件

时间:2017-05-22 08:09:39

标签: wpf layout share code-behind

我想创建一个应用程序,用户可以浏览放置在框架元素中的页面。问题是一个页面可以有不同的布局,基本上提供相同的功能。每个布局可以有或多或少的按钮或输入控件,但它们都应该在文件后面共享相同的代码。

在Windows窗体中,我曾经将所有元素(布局)放在同一个窗体上,然后隐藏/显示我需要的控件,但这是一个非常难看的解决方案,我希望WPF提供更方便的东西这里。

我尝试创建2个页面,删除了各自的.cs文件并设置了他们的" x:Class"属性为自定义.cs文件,但这会导致编译器错误(对InitializeComponent()的模糊调用)。

那么我可以拥有多个共享相同代码的页面吗?

1 个答案:

答案 0 :(得分:2)

您应该将逻辑从代码隐藏类移动到视图模型类。此模式称为Model-View-ViewModel,是开发基于XAML的用户界面应用程序时使用的 推荐设计模式。

有很多关于它的在线教程,这个教程应该为你提供一个很好的起点:https://msdn.microsoft.com/en-us/library/hh848246.aspx

一旦理解了模式并在视图模型类中实现了应用程序逻辑,就可以简单地将两个页面的DataContext属性设置为相同的视图模型:

public Page1()
{
    InitializeComponent();
    DataContext = new ViewModel();
}

代码隐藏类只是一个部分类,即它是您在XAML中定义的Page的部分定义,因此您无法在几个不同的页面之间“共享”此类。

部分类只是在几个不同的源文件中分割类定义的一种方式:https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/classes-and-structs/partial-classes-and-methods