我有一个用户窗口,包含3个控件 - 一个“执行”按钮、一个结果控件和一个处理控件。我的目标是,在按下“执行”按钮后显示处理控件,当执行方法完成时隐藏它。
然而,当我按照预期去做时,处理控件并没有显示出来...只有在调用创建另一个提示用户输入的窗口的回调函数时才会显示出来。
处理控件的可见性通过BoolToVis转换器绑定到我的视图模型中的bool变量
然而,当我按照预期去做时,处理控件并没有显示出来...只有在调用创建另一个提示用户输入的窗口的回调函数时才会显示出来。
处理控件的可见性通过BoolToVis转换器绑定到我的视图模型中的bool变量
Processing
。执行方法在开始时将Processing
设置为true,完成后将其设置为false。Processing
的setter调用了OnPropertyChanged
。我的视图模型实现了INotifyPropertyChanged
。 private bool _processing;
public bool Processing
{
get
{ return _processing; }
set
{
_processing = value;
this.OnPropertyChanged("Processing");
}
}
private RelayCommand _search;
public RelayCommand Search
{
get { return _search ?? (_search = new RelayCommand(p => OnSearch(), p => CanSearch())); }
}
private void OnSearch()
{
this.Processing = true;
DoWork(delegate callBack);
this.Processing = false;
}
以下是一些XAML代码:
<BooleanToVisibilityConverter x:Key="BoolToVis" />
<me:ProcessingControl Visibility="{Binding Path=Processing, Converter={StaticResource ResourceKey=BoolToVis}}"/>
DoWork()
方法,可以通过使用BackgroundWorker
或TPL中的Task<T>
来实现,如果你正在使用C# 5(VS 2012),可以使用await
来执行该方法。 - Federico BerasateguiBackgroundWorker
中进行。将您的工作方法订阅到后台工作者的DoWork
事件,并设置Processing = true
。然后订阅一个完成方法到RunWorkerCompleted
,在其中您应该设置Processing = false
。 - Will Faithfull