来自放置在主窗口应用程序内的页面的WPF启用/禁用控件

时间:2010-03-23 11:49:36

标签: wpf controls window

我有一个有主窗口的WPF应用程序。在左侧 这个窗口有一些按钮进入列表框,它是一种菜单 更快地访问页面。这些按钮属于页面 当用户选择一个窗口时,它们被加载到窗口内。

主窗口顶部还有另一个主菜单,用于执行其他任务。

在主窗口中加载页面并且用户单击按钮时 这个当前加载的页面,它启动一个需要很长时间的任务。 虽然这个长任务正在执行,但我希望用户无法选择(或按下) 进入列表框的任何按钮都是因为在加载页面中的长任务 也正在更新此页面的UI。我想禁用(isEnabled = false) 执行长任务时的列表框,直到长时间才启用它 任务完成了。我怎样才能做到这一点?我的意思是,从页面当前加载 我想禁用放置在主窗口中的列表框。

列表框不属于当前加载的页面。

谢谢!

2 个答案:

答案 0 :(得分:1)

执行此操作的“正确”方法是为按钮实现自定义命令(ICommand)。然后,您可以将按钮上的Command属性设置为自定义命令。当命令执行时,即在Execute方法中,您可以将_isRunning字段设置为true,然后在CanExecute实现中,您可以返回基于_isRunning的值:例如......

public class YourButtonCommand : ICommand {

...

public void Execute
{
    _isRunning = true
     ... do your window loading here
    _isRunning = false;
}

public bool CanExecute(object parameter)
{
    return !_isRunning;
}

....

}

public void Execute { _isRunning = true ... do your window loading here _isRunning = false; } public bool CanExecute(object parameter) { return !_isRunning; }

答案 1 :(得分:0)

最后,我了解了如何处理Icommand。在花了很多时间之后,我看到了它的强大功能,并且我将所有可点击的控件绑定到我有兴趣重新启用/禁用命令的命令中,当长任务(后台工作程序)正在进行时,带有canBeExecute的命令返回false 。我已经实现了一个命令静态类来检查其中一个后台工作程序(长任务)是否正在运行,并且根据一个任务是否正在运行,它返回一个返回true或false的方法。所以在canExecuted方法中,我检查这个访问放在类中的方法。

谢谢你的好主意!