gpt4 book ai didi

WPF MVVM - 禁用复选框需要绑定(bind)到 IsEnabled 的属性上的 setter 才能工作

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

我的一位同事刚刚在 Wpf 中遇到了一些奇怪的绑定(bind)行为。

首先,这是他想要实现的目标:

  • 显示一个禁用的复选框(因此用户无法通过单击它来设置它)
  • 将此复选框 IsChecked 绑定(bind)到一些 bool 值以通知用户某些过滤器是否处于事件状态。

  • 在代码中,属性如下所示:

    C#
    public bool IsFooBarFilterEnabled
    {
    get
    {
    return _isFoo && _isBar;
    }
    }

    XAML
    <CheckBox IsChecked="{Binding IsFooBarFilterEnabled}" IsEnabled="False" />

    然后当他设置 _isFoo_isBar他调用 RaisePropertyChanged(()=>IsFooBarFilterEnabled);
    到目前为止,对我来说一切都很好......但他的代码不起作用。

    我们必须像这样添加一个空 setter :
    public bool IsFooBarFilterEnabled
    {
    get
    {
    return _isFoo && _isBar;
    }
    set{}// that's not what i would call beautifull code
    }

    这就是我的问题所在。如果复选框被禁用,则永远不应调用 IsFooBarFilterEnabled 上的 setter 。那么为什么要创建一个来避免崩溃呢?我们对此有什么错误?

    最佳答案

    默认情况下,Binding Mode设置为 TwoWay ,这意味着如果更改了另一个,则必须更新属性和组件。此外,ComboBoxdisabled现在,这并不意味着它会一直被禁用。

    您必须创建空集(如果您希望继续使用 TwoWay 绑定(bind))或设置 Binding ModeOneWay (这意味着组件应该在属性更改时更新,而不是相反)

    这是一个例子:

    <CheckBox IsChecked="{Binding IsFooBarFilterEnabled, Mode=OneWay}" IsEnabled="False" />

    关于WPF MVVM - 禁用复选框需要绑定(bind)到 IsEnabled 的属性上的 setter 才能工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42109827/

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