2017-05-22 51 views
-1

我想创建一个应用程序,其中用户浏览位于框架元素内的页面。问题是一个页面可以有不同的布局,它们基本上提供了相同的功能。每个布局可以有几个按钮或输入控件,但是它们都应该在文件后面共享相同的代码。在Windows窗体中,我用所有元素(布局)放在同一个窗体上,然后隐藏/显示我需要的控件,但这是一个非常难看的解决方案,我希望WPF在这里提供了更方便的方法。WPF:在文件后面共享相同代码的多个XAML文件

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

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

+0

为什么不把公共部分分成共享的代码库?或者这些页面背后有什么样的代码,以及布局如何不同? –

+0

布局因颜色,字体,元素位置,元素数量以及元素提供的功能而异。主要的“问题”是布局没有足够的差异来证明分离的页面。 由于某些页面可能会控制链接到应用程序的一个或多个硬件设备,因此后面的代码可能会相当过分。虽然这些设备的控制类在它们自己的代码文件中,但调用逻辑也可能很大,应该保留在一个地方。将它移动到它自己的代码文件当然是可能的,但也比它应该更复杂。 – Cleo

回答

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

相关问题