我有一個標籤爲[NotifyPropertyChanged]
的視圖模型。這些屬性當然是綁定在輸入控件上的,比如文本框。我需要知道,模型的屬性因輸入而改變。如何使用Postsharp捕捉屬性更改?
我該如何抓住這個事件?
我有一個標籤爲[NotifyPropertyChanged]
的視圖模型。這些屬性當然是綁定在輸入控件上的,比如文本框。我需要知道,模型的屬性因輸入而改變。如何使用Postsharp捕捉屬性更改?
我該如何抓住這個事件?
如果NotifyPropertyChanged裝飾類直接實現INotifyPropertyChanged,然後PostSharp要求有與簽名的方法:
void OnPropertyChanged(string propertyName)
這種方法具有明確提高PropertyChanged事件。工作示例可能如下所示:
[NotifyPropertyChanged]
public class OsModel : INotifyPropertyChanged
{
public int P1 { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
可以找到其他信息here。
即使我有一個解決方案,我會嘗試你的,並接受作爲答案,因爲它看起來更清潔,然後我的反思。謝謝。 – 2014-11-05 12:12:32
其實沒有「代碼」,因爲Postsharp做了艱苦的工作,所以我不得不宣佈我的課只能用標籤:
[NotifyPropertyChanged]
public class OsModell // : ... interfaces only
{
...
}
只爲我回答我的問題是,它可能是有用的人也知道,當你沒有代碼時,如何從這種情況中獲得事件,因爲postharp是編譯時。您可以使用反射運行時並附加您自己的事件處理程序。你可能會認爲,它殺死了爲此發生Postharp的目的,但是有些情況下(像我的是在哪裏使用編寫良好的父類來源),您可能會發現它更有用,然後調用OnPropertyChanged類似的方法寫你自己的自我。
所以..你可以只附加這個運行時,因爲在設計時你沒有代碼,因爲PS做了很多工作。你可以這樣做:
[NotifyPropertyChanged]
public class OsModell //...
{
public OsModell()
{
//...
#region feliratkozás helyi propertychangedre úgy, hogy még dizájn alatt nem létezik
//forrás: http://msdn.microsoft.com/en-us/library/ms228976(v=vs.100).aspx
{
EventInfo feliratkozasiSegedEventInfo = this.GetType().GetEvent("PropertyChanged");
Type propertyChangedEventhandlerTipusa = feliratkozasiSegedEventInfo.EventHandlerType;
MethodInfo segedAhhozAmitMajdAdattartalomValtozasahozCsatolok = this.GetType().GetMethod("megvaltozottAzAdattartalom", BindingFlags.NonPublic | BindingFlags.Instance);
Delegate d = Delegate.CreateDelegate(propertyChangedEventhandlerTipusa, this, segedAhhozAmitMajdAdattartalomValtozasahozCsatolok);
MethodInfo addHandler = feliratkozasiSegedEventInfo.GetAddMethod();
Object[] addHandlerArgs = { d };
addHandler.Invoke(this, addHandlerArgs);
}
#endregion
}
protected void megvaltozottAzAdattartalom(Object sender, EventArgs e)
{
//...
}
你可能會發現代碼塊中的鏈接有用。 如果您從此課程派生,則應該使用protected
,如果不是,也可以使用private
。
有些代碼會有所幫助。 – thumbmunkeys 2014-11-04 11:59:11