按钮isEnabled = true在没有鼠标单击WPF MVVM的情况下无效

时间:2012-11-04 13:34:31

标签: wpf user-interface mvvm

我有基于MVVM模式的wpf应用程序。 我有烦人的问题,我无法解决如何解决它。

我的应用程序是向导应用程序,当用户按下“下一步”时我在另一个线程(后台工作者)中开始一些进度,当bgWorker启动时,他设置CanMoveNext = false绑定到下一步按钮isEnabled属性,当bgworker完成后他退回CanMoveNext = true;

CanMoveNext获取IsEnabled = false时,UI会立即显示,但在isEnabled propery设置回true后,UI会在鼠标单击或键盘按键后立即刷新。

m changing the property I使用OnPropertyChanged()方法后,我甚至尝试使用CommandManager.InvalidateRequerySuggested();但是如果没有鼠标点击它仍然没有刷新。

我该如何解决这个问题?

这是我的代码:

       public override bool CanMoveNext
        {
            get
            {
                return canMoveNext;
            }
            set
            {
                canMoveNext = value;
                OnPropertyChanged("CanMoveNext");
            }
        }



    public void StartProgress()
            {

                CanMoveNext = false;
                InitBGworkers(out bgStartPersonalWorker);
    bgStartPersonalWorker.RunWorkerAsync();
    }



        void bgStartPersonalWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            DoStuff();
        }



        void bgStartPersonalWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
                {
     CanMoveNext = true;
//Even  CommandManager.InvalidateRequerySuggested(); doen`t help
                }

//来自XAML的代码

<Button Content="{Binding ButtonNextCaption}" IsEnabled="{Binding CanMoveNext, UpdateSourceTrigger=PropertyChanged}" Command="{Binding Path=NavigateNextCommand}" Margin="5,0,5,0" Width="100" Height="40" FontSize="14" FontWeight="Bold"/>

由于

1 个答案:

答案 0 :(得分:1)

我想如何解决它:

            Application.Current.Dispatcher.BeginInvoke(new ThreadStart(() =>
            {
                CommandManager.InvalidateRequerySuggested();

            }));