我想创建一个应用程序,用户可以浏览放置在框架元素中的页面。问题是一个页面可以有不同的布局,基本上提供相同的功能。每个布局可以有或多或少的按钮或输入控件,但它们都应该在文件后面共享相同的代码。
在Windows窗体中,我曾经将所有元素(布局)放在同一个窗体上,然后隐藏/显示我需要的控件,但这是一个非常难看的解决方案,我希望WPF提供更方便的东西这里。
我尝试创建2个页面,删除了各自的.cs文件并设置了他们的" x:Class"属性为自定义.cs文件,但这会导致编译器错误(对InitializeComponent()的模糊调用)。
那么我可以拥有多个共享相同代码的页面吗?
答案 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。