- A+
所属分类:.NET技术
在写自定义控件的时候,有一部分功能是当内部的值发生变化时,需要通知控件的使用者,而当我在写依赖项属性的时候,我可以通过popdp对应的代码模板来完成对应的代码,但是当我来写属性更改回调的时候,却发现没有对应的RoutedEvent,导致需要手撸那么多的代码,而很多时候一旦项目中赶进度,也许就会因为这个原因,把VM下的逻辑放到了UserContorl里了。(我review别人的代码时,发现了好多这种现象,但是逻辑都写完了,改动又太大,而且可能他们一直处于加班状态,我也不好意思在指出这些问题)。所以这一篇是写使用代码模板辅助我们写UserControl时更好的解耦。下一篇博客是讲usercontrol的。里面很多复杂有规律的代码都不是我手撸的,是通过代码模板添加完之后生成的。
如何使用代码模板
在类中定义属性时输入prop对应的单词,然后按下2次Tab键,就可以生成代码片段。
(1)在类中输入prop=》2次Tab创建属性。
(2)生成如下代码:
public int MyProperty { get; set; }
这个内容的定义是在Visual Studio 的工具=》代码片段管理器=》语言我选择CSharp=》My Code Snippets下添加我自己的代码片段。
点击添加=》导入选择我的snippet文件点击导入。如下图
我上传的是一个自动添加路由事件用于属性通知的代码片段。
使用方式如上图在类中输入propurv按下2次Tab键就可以快速的创建代码,模板具体如下,可以快速的修改内容。
private void OnDefaulRoutedEventChanged(MyProperty oldValue, MyProperty newValue)
{
RoutedPropertyChangedEventArgs<MyProperty> args = new RoutedPropertyChangedEventArgs<MyProperty>(oldValue, newValue);
args.RoutedEvent = ownerclass.DefaulRoutedEventChangedEvent;
RaiseEvent(args);
}
public static readonly RoutedEvent DefaulRoutedEventChangedEvent = EventManager.RegisterRoutedEvent("DefaulRoutedEventChanged", RoutingStrategy.Bubble,
typeof(RoutedPropertyChangedEventHandler<MyProperty>), typeof(ownerclass));
public event RoutedPropertyChangedEventHandler<MyProperty> DefaulRoutedEventChanged
{
add { AddHandler(DefaulRoutedEventChangedEvent, value); }
remove { RemoveHandler(DefaulRoutedEventChangedEvent, value); }
}
这篇的主要目的是为了更好的编写代码。是我在自定义控件代码中解耦VM和UserContorl混用的。