WPF控制可见性w/ICommand&;OnPropertyChanged
本文关键字:amp OnPropertyChanged ICommand 控制 可见性 WPF | 更新日期: 2023-09-27 18:28:45
我有一个包含3个控件的用户窗口——一个"执行"按钮、一个结果控件和一个处理控件。我的目标是在按下execute后显示处理控件,然后在execute方法完成时隐藏它。
然而,当我认为处理控件会。。。相反,它只在调用(if)创建另一个提示用户输入的窗口的回调函数时显示。
处理控件的可见性通过BoolToVis转换器绑定到我的视图模型中的布尔Processing
。execute方法在开始时将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}}"/>
使用Task或Background Worker执行DoWork,在启动任务或Backgrounds Worker之前设置Processing=true,并在任务结束时设置false。这将使处理控件可见和隐藏。如果您在任务或后台工作人员中链接bool Processing的值,请确保通过调度器调用它