Je viens du développement de solutions WPF où la mise à jour de toutes les propriétés du viewmodel était aussi simple que :
OnPropertyChanged(String.Empty);
Dans le scénario de la plate-forme Windows universelle, j'ai simplement la même méthode pour mettre à jour/rafraîchir les propriétés. Cela fonctionne bien dans la plupart des cas, mais parfois, une erreur se produit, comme celle-ci :
COMException Error HRESULT E_FAIL a été renvoyé par un appel à un composant COM. at System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e) at GeekyTool.Base.BindableBase. OnPropertyChanged(String propertyName) at Pooo.set_Root(UserRoot value) at Booo.d__26.MoveNext() --- Fin de la trace de pile de l'emplacement précédent où l'exception a été levée --- at System.Runtime.CompilerServices. TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at GeekyTool.Base.PageBase.d__1. MoveNext() --- Fin de la trace de pile de l'emplacement précédent où l'exception a été levée --- at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.b__6_0(Object state) at System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore()
En OnPropertyChanged
avec une méthode INotifyPropertyChanged
L'implémentation de l'interface ressemble à ceci :
public abstract class BindableBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
public virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public virtual bool Set<T>(ref T storage, T value, [CallerMemberName]string propertyName = null)
{
if (object.Equals(storage, value))
return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
}
Vous pouvez explorer la bibliothèque mvvm, mais rien de différent sur l'implémentation INotifyPropertyChanged.