WPF Control Visibility w/ ICommand & OnPropertyChanged



我有一个包含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的值,请确保通过调度器调用它

最新更新