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

WPF: Multiple XAML files that share the same code behind file

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

在 Windows 表单中,我曾经将所有元素(布局)放在同一个表单上,然后 hide/show 我需要的控件,但这是一个非常丑陋的解决方案,我希望WPF 在这里提供了一些更方便的东西。

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

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

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

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

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

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

代码隐藏 class 只是部分 class,即它是您在 XAML 中定义的 Page 的部分定义,因此您不能 "share"这个在几个不同的页面之间。

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