我有两个具有完全不同布局的控件,但它们的XAML结构非常相似(相同类型的容器甚至相同的元素名称),因此后面的代码是相同的。不幸的是,到目前为止,我不得不为这两个类中的每个类重复所有事件处理程序的代码。
我现在正在使用组合提取卫星类的常用功能,但构造函数,字段声明和初始化的冗余仍困扰着我。
所以问题归结为:
当两个UserControl只有布局差异但代码隐藏相同时,有没有办法避免代码背后的冗余代码?
答案 0 :(得分:1)
WPF使用可以更改的controltemplate分离这些问题。 “代码隐藏”就是行为。您不需要ViewModel。
答案 1 :(得分:1)
解决方案很少:
创建从UserControl继承的抽象类。将公共逻辑放在BaseClass中。
将“UserControl”更改为从BaseClass而不是UserControl继承。所以最后你将有两个从你的基类继承的UserControl。
考虑创建Control,而不是UserControl。您可以为控件创建两个ControlTemplates。
<local:YourControl Template="{StaticResource Template1}" />
<local:YourControl Template="{StaticResource Template2}" />
在MVVM中,您可以轻松地为单个视图模型创建多个视图。虽然有些人会遇到每个视图模型的单个视图,反之亦然,但您可以创建两个从一个公共库继承的视图模型,或者继承自FirstViewModel的SecondViewModel。
答案 2 :(得分:0)
您的要求实际上只有您自己知道。我要回答你强调的问题:
Is there a way to avoid redundant code behind code when two UserControls
have only layout differences, but identical code-behind?
如果您希望灵活地分离不同布局的视图,那么最好选择松散的XAML文件。并在运行时加载这些文件。您可以在运行时更改这些文件,而无需更改应用程序代码。就像我们可以动态更改CSS / JS文件一样。
我开发了一个满足您需求的应用程序。我开发了3个用户控件:
您可以检查,如果需要进行一些改进,我会这样做。
答案 3 :(得分:-1)
基于有限范围的最佳实践将是使用MVVM模式并将代码移动到适当的位置。
但是要回答你的问题,特别是,我会将代码分解为一个或多个可移植类库。根据应用程序的复杂程度,您可以将代码分解为项目中的类。