Gibt es einen Benachrichtigungsmechanismus für, wenn ein Abhängigkeitseigenschaft hat sich geändert?
-
04-07-2019 - |
Frage
In einer Silverlight-Anwendung, die ich versuche, herauszufinden, wenn eine Eigenschaft auf einem Usercontrol geändert hat. Ich habe Interesse an einem bestimmten DependencyProperty, aber leider ist die Steuerung selbst nicht INotifyPropertyChanged implementieren.
Gibt es eine andere Art und Weise zu bestimmen, ob der Wert geändert hat?
Lösung
In WPF Sie haben DependencyPropertyDescriptor.AddValueChanged , aber leider in Silverlight ist es nicht so etwas. So lautet die Antwort nein.
Vielleicht, wenn Sie erklären, was Sie zu tun versuchen können Sie die Situation oder die Verwendung Bindungen umgehen.
Andere Tipps
Sie können. Zumindest habe ich getan. Dennoch müssen die Vor-und Nachteile sehen.
/// Listen for change of the dependency property
public void RegisterForNotification(string propertyName, FrameworkElement element, PropertyChangedCallback callback)
{
//Bind to a depedency property
Binding b = new Binding(propertyName) { Source = element };
var prop = System.Windows.DependencyProperty.RegisterAttached(
"ListenAttached"+propertyName,
typeof(object),
typeof(UserControl),
new System.Windows.PropertyMetadata(callback));
element.SetBinding(prop, b);
}
Und jetzt können Sie RegisterForNotification fordern eine Änderungsmitteilung einer Eigenschaft eines Elements zu registrieren, wie.
RegisterForNotification("Text", this.txtMain,(d,e)=>MessageBox.Show("Text changed"));
RegisterForNotification("Value", this.sliderMain, (d, e) => MessageBox.Show("Value changed"));
Siehe meinen Beitrag hier auf der gleichen http: // amazedsaint .blogspot.com / 2009/12 / Silverlight-Listening-to-dependency.html
Als Jon Galloway auf einem anderen Thread geschrieben, könnten Sie in der Lage sein, so etwas wie WeakReference zu verwenden, um Eigenschaften zu wickeln Sie Interesse an und registrieren Sie sie in Ihrer eigenen Klasse. Dies ist WPF-Code, aber das Konzept beruht nicht auf DependencyPropertyDescriptor.
Überprüfen Sie den folgenden Link aus. Es zeigt und indem diejenigen, wie um das Problem in Silverlight zu bekommen, wo Sie nicht DependencyPropertyDescriptor.AddValueChanged
http://themechanicalbride.blogspot.com/2008 /10/building-observable-model-in.html