我怎样才能在后面重用我的代码?
How could I reuse my code behind?
我有两个布局完全不同的控件,但它们的 XAML 结构非常相似(相同类型的容器,甚至相同的元素名称),因此 它们背后的代码是相同的。不幸的是,到目前为止,我不得不为两个 类.
中的每一个的所有事件处理程序重复代码
我现在正在使用组合提取卫星 类 的通用功能,但构造函数、字段声明和初始化的冗余仍然困扰我很多。
所以问题归结为:
Is there a way to avoid redundant code behind code when two UserControls have only layout differences, but identical code-behind?
基于有限范围的最佳实践是使用 MVVM 模式并将代码移动到适当的位置。
但是为了回答您的问题,具体来说,我会将代码分解到一个或多个便携式 Class 库中。根据应用程序的复杂性,您可以将代码提取到项目中的 类。
WPF 使用可以更改的控件模板来分离这些问题。 "code-behind" 是行为。您不需要 ViewModel。
其实你的要求是什么,只有你自己知道。我正在回答你强调的问题:
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 个用户控件:
- UserControl1 : 使用松散文本文件进行布局
- UserControl2:使用公共视图模型,集中连接事件处理程序。但这可能不适合这里。
- UserControl3 : 使用宽松的 xaml 文件进行布局
你可以检查一下,如果需要做一些改进,我会做的。
解决方案很少:
创建从 UserControl 继承的抽象 class。将通用逻辑放在 BaseClass 中。
比更改 "UserControl" 继承自 BaseClass 而不是 UserControl。所以最后你会有两个继承自你的 baseclass.
的 UserControls
考虑创建 Control,而不是 UserControl。您可以为控件创建两个 ControlTemplates。
<local:YourControl Template="{StaticResource Template1}" />
<local:YourControl Template="{StaticResource Template2}" />
在 MVVM 中,您可以轻松地为单个视图模型创建多个视图。虽然有些人更喜欢每个视图模型一个视图,反之亦然,但您可以创建从一个公共基础继承的两个视图模型,或从 FirstViewModel 继承的 SecondViewModel。
我有两个布局完全不同的控件,但它们的 XAML 结构非常相似(相同类型的容器,甚至相同的元素名称),因此 它们背后的代码是相同的。不幸的是,到目前为止,我不得不为两个 类.
中的每一个的所有事件处理程序重复代码我现在正在使用组合提取卫星 类 的通用功能,但构造函数、字段声明和初始化的冗余仍然困扰我很多。
所以问题归结为:
Is there a way to avoid redundant code behind code when two UserControls have only layout differences, but identical code-behind?
基于有限范围的最佳实践是使用 MVVM 模式并将代码移动到适当的位置。
但是为了回答您的问题,具体来说,我会将代码分解到一个或多个便携式 Class 库中。根据应用程序的复杂性,您可以将代码提取到项目中的 类。
WPF 使用可以更改的控件模板来分离这些问题。 "code-behind" 是行为。您不需要 ViewModel。
其实你的要求是什么,只有你自己知道。我正在回答你强调的问题:
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 个用户控件:
- UserControl1 : 使用松散文本文件进行布局
- UserControl2:使用公共视图模型,集中连接事件处理程序。但这可能不适合这里。
- UserControl3 : 使用宽松的 xaml 文件进行布局
你可以检查一下,如果需要做一些改进,我会做的。
解决方案很少:
创建从 UserControl 继承的抽象 class。将通用逻辑放在 BaseClass 中。
比更改 "UserControl" 继承自 BaseClass 而不是 UserControl。所以最后你会有两个继承自你的 baseclass.
的 UserControls
考虑创建 Control,而不是 UserControl。您可以为控件创建两个 ControlTemplates。
<local:YourControl Template="{StaticResource Template1}" /> <local:YourControl Template="{StaticResource Template2}" />
在 MVVM 中,您可以轻松地为单个视图模型创建多个视图。虽然有些人更喜欢每个视图模型一个视图,反之亦然,但您可以创建从一个公共基础继承的两个视图模型,或从 FirstViewModel 继承的 SecondViewModel。