gpt4 book ai didi

c# - RaisePropertyChanged() 没有更新单个按钮的值

转载 作者:行者123 更新时间:2023-12-03 10:27:43 26 4
gpt4 key购买 nike

我已经将 MVVM 与我的 WPF 应用程序一起使用了一段时间,但是我试图让一个按钮保持禁用状态,直到它可以启用为止。没问题,我将在 ViewModel 中创建一个 bool 并将其绑定(bind)到其中。

bool :

    private bool m_EnableLoadQuickStatsButton;
public bool EnableLoadQuickStatsButton
{
get { return m_EnableLoadQuickStatsButton; }
set { m_EnableLoadQuickStatsButton = value; RaisePropertyChanged("EnableLoadQuickStatsButton"); }
}

XAML 按钮:
                <Button Margin="5"
FontSize="14"
IsEnabled="{Binding EnableLoadQuickStatsButton}">
Load Quickstats
</Button>

数据上下文声明:
DataContext="{StaticResource MainScreenViewModel}

设计器的 .gif 和由初始属性值启用/禁用的按钮示例: http://i.imgur.com/lpVeEBd.gif

该按钮的启用/禁用基于属性开始的任何内容。但是,更改属性不会启用/禁用我的按钮。为什么是这样?我的任何其他控件和属性似乎都没有任何问题。

编辑:

我的类正确实现了 INotifyPropertyChanged,还有其他属性的值绑定(bind)到我的 WPF 应用程序中的控件,它们按预期工作。

Edit2:应用程序的 A.gif,显示 DataBinding 工作的其他部分: http://i.imgur.com/lIvzHv7.gif

Edit3:开始调试时的输出:
System.Windows.Data Warning: 56 : Created BindingExpression (hash=51180192) for Binding (hash=56315736)
System.Windows.Data Warning: 58 : Path: 'EnableLoadQuickStatsButtonTest'
System.Windows.Data Warning: 60 : BindingExpression (hash=51180192): Default mode resolved to OneWay
System.Windows.Data Warning: 61 : BindingExpression (hash=51180192): Default update trigger resolved to PropertyChanged
System.Windows.Data Warning: 62 : BindingExpression (hash=51180192): Attach to System.Windows.Controls.Button.IsEnabled (hash=23804398)
System.Windows.Data Warning: 67 : BindingExpression (hash=51180192): Resolving source
System.Windows.Data Warning: 70 : BindingExpression (hash=51180192): Found data context element: Button (hash=23804398) (OK)
System.Windows.Data Warning: 78 : BindingExpression (hash=51180192): Activate with root item MainScreenViewModel (hash=64564967)
System.Windows.Data Warning: 108 : BindingExpression (hash=51180192): At level 0 - for MainScreenViewModel.EnableLoadQuickStatsButtonTest found accessor RuntimePropertyInfo(EnableLoadQuickStatsButtonTest)
System.Windows.Data Warning: 104 : BindingExpression (hash=51180192): Replace item at level 0 with MainScreenViewModel (hash=64564967), using accessor RuntimePropertyInfo(EnableLoadQuickStatsButtonTest)
System.Windows.Data Warning: 101 : BindingExpression (hash=51180192): GetValue at level 0 from MainScreenViewModel (hash=64564967) using RuntimePropertyInfo(EnableLoadQuickStatsButtonTest): 'False'
System.Windows.Data Warning: 80 : BindingExpression (hash=51180192): TransferValue - got raw value 'False'
System.Windows.Data Warning: 89 : BindingExpression (hash=51180192): TransferValue - using final value 'False'

Edit4: 创建了一个新项目,它按预期工作,只是由于某种原因不在我当前的项目中。

最佳答案

正如评论中指出的那样,似乎 ViewModel 被实例化了几次,而按钮的 DataContext 中的那个与被更改的实例不同。

一个简单的测试证明了这一点。

至于一些扩展技巧……使用 MVVM 背后的想法是将 View 与模型分离。我会避免使用名称暗示“按钮”或任何其他视觉元素的属性。
EnableLoadQuickStatsButton在 ViewModel 中应该被称为 AreQuickStatsReadyToBeLoaded或类似的东西

关于c# - RaisePropertyChanged() 没有更新单个按钮的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32368081/

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