私は同じくらい簡単だったのviewmodelのすべてのプロパティを更新するためにWPFのソリューション開発から来ている:ユニバーサルのWindowsプラットフォームのシナリオではがnullまたは文字列に変更された空の
OnPropertyChanged(String.Empty);
を、私はちょうどプロパティを更新/リフレッシュする同じメソッドを持っています。これはほとんどの場合うまく動作しますが、次のようなエラーが発生することがあります。
COMException COMコンポーネントへの呼び出しからHRESULT E_FAILが返されました。 Booo.d__26.MoveNext()のPooo.set_Root(UserRoot値)のGeekyTool.Base.BindBase.BindableBase.OnPropertyChanged(String propertyName)のSystem.ComponentModel.PropertyChangedEventHandler.Invoke(Object Sender、PropertyChangedEventArgs e)---スタックトレースの終了GeekyTool.Base.PageBase.d__1.MoveNext()のSystem.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(タスクタスク)でSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスクタスク)で例外がスローされた前の場所から取得します。 ---例外がスローされた前の場所からのスタックトレースの終了--- System.Runtime.CompilerServices.AsyncMethodBuilderCore。 <
INotifyPropertyChanged
インタフェースの実装と> c.b__6_0 System.Threading.WinRTSynchronizationContext.Invoker.InvokeCoreで(オブジェクトの状態)()
OnPropertyChanged
方法は次のようになります。
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;
}
}
あなたは探索することができますmvvmライブラリですが、INotifyPropertyChanged実装では何も変わりません。
Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() =>
{
OnPropertyChanged(string.Empty);
});
これがUWPで働いていれば驚きました。コードには、String.Emptyというプロパティ名を扱う特別なものは何もありません。あなたは完全なレクロを利用できますか? https://stackoverflow.com/help/mcve –
@MattLacey、 'INotifyPropertyChangedを発生させます。PropertyChanged'イベントを 'string.empty'と一緒に使うのは、AFAIKがUWPで正常に機能してすべての(クラシックまたはコンパイルされた)バインディングを強制的にリフレッシュする"古い "トリックです! –
x:bindを使用している場合は、ページのコードの背後にある 'this.Bindings.Update()'を呼び出して、そのページのすべてのバインディングを強制的に更新することができます。 – Rafael