我有一个简单的按钮:
<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");
}
}
}
知道这里可能有什么问题吗?
由于
答案 0 :(得分:0)
在您的回调中,您可能需要指示用户界面再次检查该属性并进行相应更新。这是使用CommandManager
执行的。我在你的回调代码中加了一点:
private void DisplayResult()
{
Loading = false;
CommandManager.InvalidateRequerySuggested();
}
CommandManager.InvalidateRequerySuggested
指示WPF立即更新任何绑定控件。