在寫自定義控件的時候,有一部分功能是當內部的值發生變化時,需要通知控件的使用者,而當我在寫依賴項屬性的時候,我可以通過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混用的。