1

RaisePropertyChanged(PropName, oldValue, true, true)インターネットに接続できなくなると、間違ったスレッドにいるという例外がスローされるというプロパティがあります。したがって、ViewModelからプロパティを更新したいのですが、ViewModelで現在のスレッドを取得するにはどうすればよいですか、またはソリューションの提案は何ですか?

私のViewModel-ctor

public MyViewModel()
{
   // START LISTENING TO NETWORKSTATUS
   NetworkInformation.NetworkStatusChanged += OnNetworkStatusChangedHandler;
}

NetworkChanged-コールバックメソッド

   private async void OnNetworkStatusChangedHandler(object sender)
   {
       ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();

       if (profile == null)
       {
          IsRefreshEnabled = false;
       }
       else
       {
          IsRefreshEnabled = true;
       }

   }

私の財産

public const string IsRefreshEnabledPropertyName = "IsRefreshEnabled";
        private bool _isRefreshEnabled = true;
        public bool IsRefreshEnabled
        {
            get { return _isRefreshEnabled; }

            set
            {
                if (_isRefreshEnabled == value) { return; }

                var oldValue = _isRefreshEnabled;
                _isRefreshEnabled = value;
                RaisePropertyChanged(IsRefreshEnabledPropertyName, oldValue, value, true);
            }
        }

前もって感謝します!

4

1 に答える 1

5

RaisePropertyChanged呼び出しを次のように置き換える必要があります。

await Dispatcher.RunAsync(DispatcherPriority.Normal, (){RaisePropertyChanged(IsRefreshEnabledPropertyName, oldValue, value, true)});  

これにより、RaisePropertyChangedの呼び出しがUIスレッドで実行されます。

クラスはXamlコントロールから派生していると想定しています(コントロールのDispatcherプロパティにアクセスするため)。

于 2012-06-28T14:04:00.280 に答える