MVVM - IsEnabled与绑定布尔值无法正常工作

时间:2012-06-19 16:20:39

标签: c# wpf button mvvm isenabled

我有一个简单的按钮:

<Button Content="Login" Command="{Binding StartAction}" IsEnabled="{Binding Path=Loading, Converter={StaticResource InverseBooleanConverter}}"/>

如您所见,IsEnabled绑定到布尔属性。执行StartAction时,boolean设置为true,因此按钮被禁用(注意我正在使用InverseBooleanConverter)。这很好。

更改布尔值后,StartAction方法创建一个新线程,该线程在完成时调用ViewModel(创建线程的位置,以及可以找到StartAction方法的位置)的回调。这个回调非常简单:

private void DisplayResult()
{
    Loading = false;
}

这应该再次启用按钮,但是,这不会发生。

如果我在其他地方设置false,则按钮会启用。与按钮一起,一些其他元素(也绑定到这个布尔值)应该在布尔值改变时变得不可见/可见,并且DOES也能正常工作,即使回调方法改变了Loading属性。

我在这里有点困惑。为什么不起作用?我认为它可能与该线程有关,但我没有看到任何原因导致它不起作用,特别是因为它与UI上的其他元素一起使用。

为了清楚起见,这是Loading属性:

public bool Loading
{
    get { return loading; }
    set
    {
        if (loading != value)
        {
            loading = value;
            RaisePropertyChanged("Loading");
        }
    }
}

知道这里可能有什么问题吗?

由于

1 个答案:

答案 0 :(得分:0)

在您的回调中,您可能需要指示用户界面再次检查该属性并进行相应更新。这是使用CommandManager执行的。我在你的回调代码中加了一点:

private void DisplayResult()
{
    Loading = false;
    CommandManager.InvalidateRequerySuggested();
}

CommandManager.InvalidateRequerySuggested指示WPF立即更新任何绑定控件。