Existe um mecanismo de notificação para quando uma propriedade de dependência que mudou?
-
04-07-2019 - |
Pergunta
Em um aplicativo Silverlight Eu estou tentando descobrir quando uma propriedade em um usercontrol mudou. Estou interessado em um DependencyProperty particular, mas, infelizmente, o próprio controle não implementar INotifyPropertyChanged.
Existe alguma outra maneira de determinar se o valor mudou?
Solução
Em WPF você tem DependencyPropertyDescriptor.AddValueChanged , mas infelizmente no Silverlight não há tal coisa. Portanto, a resposta é não.
Talvez se você explicar o que você está tentando fazer você pode contornar a situação, ou usar ligações.
Outras dicas
Você pode. Pelo menos eu fiz. Ainda preciso ver os prós e contras.
/// 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);
}
E agora, você pode chamar RegisterForNotification para registrar uma notificação de alteração de uma propriedade de um elemento, como.
RegisterForNotification("Text", this.txtMain,(d,e)=>MessageBox.Show("Text changed"));
RegisterForNotification("Value", this.sliderMain, (d, e) => MessageBox.Show("Value changed"));
Veja o meu post aqui no mesmo http: // amazedsaint .blogspot.com / 2009/12 / Silverlight-listening-to-dependency.html
Como Jon Galloway postado em outro segmento, você pode ser capaz de usar algo como WeakReference para embrulhar propriedades que você está interessado e voltar a registar-los em sua própria classe. Este é o código WPF mas o conceito não depende de DependencyPropertyDescriptor.
Confira no link a seguir. Ele showns como contornar o problema no Silverlight, onde você não tem DependencyPropertyDescriptor.AddValueChanged
http://themechanicalbride.blogspot.com/2008 /10/building-observable-model-in.html