我有一个简单的按钮:
<Button Content="Login" Command="{Binding StartAction}" IsEnabled="{Binding Path=Loading, Converter={StaticResource InverseBooleanConverter}}"/>
如您所见, IsEnabled 绑定到一个布尔属性。执行 StartAction 时,布尔值设置为 true,因此按钮被禁用(请注意,我使用的是 InverseBooleanConverter)。这工作正常。
更改布尔值后,StartAction 方法创建一个新线程,该线程在完成时调用 ViewModel 上的回调(创建线程的位置,因此可以找到 StartAction 方法的位置)。这个回调很简单:
private void DisplayResult()
{
Loading = false;
}
这应该再次启用按钮,但是,这不会发生。
如果我在其他地方将加载设置为 false,则该按钮会启用。与按钮一起,其他一些元素(也绑定到此布尔值)在布尔值更改时应该变得不可见/可见,并且它也可以正常工作,即使回调方法更改了 Loading 属性。
我在这里有点困惑。为什么它不起作用?我认为这可能与线程有关,但我看不出有任何理由不应该这样做,特别是因为它可以与 UI 上的其他元素一起使用。
为了清楚起见,这是 Loading 属性:
public bool Loading
{
get { return loading; }
set
{
if (loading != value)
{
loading = value;
RaisePropertyChanged("Loading");
}
}
}
知道这里可能有什么问题吗?
谢谢