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 回答