WPF RadBusyIndi cator使用MVVM命令模式不触发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF RadBusyIndi cator使用MVVM命令模式不触发相关的知识,希望对你有一定的参考价值。
我试图在后端进程完成时显示RadBusyIndicator。我有一个绑定到命令的按钮:
XAML
<telerik:RadBusyIndicator x:Name="BusyIndicator" IsBusy="{Binding IsProcessing, Mode=TwoWay}">
<!-- Form to fill -->
<Button Name="BtnDoSomething" Content="Do Something" Command="{Binding DoSomethingCommand}" />
</telerik:RadBusyIndicator>
视图模型
public class SomethingViewModel
{
private readonly DoSomethingService _doSomethingService;
public SomethingViewModel()
{
_doSomethingService = new DoSomethingService();
CloseCuCommand = new Command(x => HandleCloseCuCommand());
}
private bool _isProcessing;
public bool IsProcessing
{
get { return _isProcessing; }
set
{
_isProcessing = value;
OnPropertyChanged(nameof(IsProcessing));
}
}
public ICommand DoSomethingCommand{ get; private set; }
private void HandleDoSomethingCommand()
{
IsProcessing = true;
_doSomethingService.LongProcess()
IsProcessing = false;
}
}
如您所见,我将BusyIndicator绑定到ViewModel上的布尔值。我已经确认OnPropertyChanged正在被点击,但它实际上并没有更新XAML页面上的值。
据我所知,这与WPF的单线程特性有关。但是,我还没有找到一种方法来对像这样绑定的Command进行线程化。我已经尝试将线程逻辑添加到CodeBehind但我仍然无法在Command端处理调度程序。
答案
通过BeginInvoke方法在您需要的位置设置IsProcessing,因为它们位于不同的线程中。
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
new Action(() =>
{
IsProcessing= true;
})
);
以上是关于WPF RadBusyIndi cator使用MVVM命令模式不触发的主要内容,如果未能解决你的问题,请参考以下文章
如何将WPFtoolkit busyindicator用于WPF应用程序