gpt4 book ai didi

c# - MVVM - IsEnabled 无法与绑定(bind) bool 值一起正常工作

转载 作者:行者123 更新时间:2023-12-03 10:49:20 25 4
gpt4 key购买 nike

我有一个简单的按钮:

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

如您所见, IsEnabled 绑定(bind)到一个 bool 属性。执行 StartAction 时, bool 值设置为 true,因此按钮被禁用(请注意,我使用的是 InverseBooleanConverter)。这工作正常。

更改 bool 值后,StartAction 方法创建一个新线程,该线程在完成时调用 ViewModel 上的回调(创建线程的位置,因此可以找到 StartAction 方法的位置)。这个回调很简单:
private void DisplayResult()
{
Loading = false;
}

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

如果我在其他地方将加载设置为 false,则该按钮会启用。与按钮一起,其他一些元素(也绑定(bind)到此 bool 值)在 bool 值更改时应该变得不可见/可见,并且它也可以正常工作,即使回调方法更改了 Loading 属性。

我在这里有点困惑。为什么它不起作用?我认为这可能与线程有关,但我看不出有什么不应该工作的原因,特别是因为它可以与 UI 上的其他元素一起工作。

为了清楚起见,这是 Loading 属性:
public bool Loading
{
get { return loading; }
set
{
if (loading != value)
{
loading = value;
RaisePropertyChanged("Loading");
}
}
}

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

谢谢

最佳答案

在您的回调中,您可能需要指示 UI 再次检查该属性并进行相应更新。这是使用 CommandManager 执行的。 .我在您的回调代码中添加了一些内容:

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

CommandManager.InvalidateRequerySuggested 指示 WPF 根据需要立即更新任何绑定(bind)控件。

关于c# - MVVM - IsEnabled 无法与绑定(bind) bool 值一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com