我有一个RaisePropertyChanged(PropName, oldValue, true, true)
的属性,当我没有任何连接到互联网时,它会抛出异常,我在错误的线程上。
所以我想从我的ViewModel更新属性,但是如何在ViewModel中获取当前线程或者您对解决方案的建议是什么?
我的ViewModel-ctor
public MyViewModel()
{
// START LISTENING TO NETWORKSTATUS
NetworkInformation.NetworkStatusChanged += OnNetworkStatusChangedHandler;
}
NetworkChanged-callback方法
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);
}
}
提前致谢!
答案 0 :(得分:5)
您需要将RaisePropertyChanged调用替换为:
await Dispatcher.RunAsync(DispatcherPriority.Normal, (){RaisePropertyChanged(IsRefreshEnabledPropertyName, oldValue, value, true)});
这将导致调用RaisePropertyChanged在UI线程上运行。
我假设你的类派生自Xaml控件(访问控件上的Dispatcher属性)。