3

我有基于 MVVM 模式的 wpf 应用程序。我有烦人的问题,我不知道该如何解决。

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

CanMoveNext获取IsEnabled = falseUI 时立即显示它,但在 isEnabled 属性设置回 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"/>

谢谢

4

1 回答 1

1

我想如何解决它:

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

            }));
于 2012-11-04T14:57:47.253 回答