gpt4 book ai didi

c# - 自定义 WPF 绑定(bind)未在列表框选择上更新

转载 作者:行者123 更新时间:2023-11-30 22:09:35 24 4
gpt4 key购买 nike

我对这可能是微不足道的事情感到困惑。我在 DevExpressesLayoutGroup 的后代上有我的自定义属性(IMO 应该没有任何区别):

public class ExpandableLayoutGroup : LayoutGroup
{
public static readonly DependencyProperty IsExpandedProperty = DependencyProperty.Register("IsExpanded", typeof(Boolean), typeof(ExpandableLayoutGroup));

public Boolean IsExpanded
{
get { return (Boolean) GetValue(IsExpandedProperty); }
set
{
expandCheckBox.IsChecked = value;
SetValue(IsExpandedProperty, value);
}
}
}

然后我将 XAML 绑定(bind)到名为 listStates 的列表框(此时包含 2 个项目)。

<ExpandableLayoutGroup x:Name="groupTool" IsExpanded="{Binding SelectedValue.IsTool, ElementName=listStates}" DataContext="{Binding Tool}" Header="Tool" View="GroupBox" />

绑定(bind)到 listStates 的对象列表包含两个属性(简化):

public class State
{
public Boolean IsItemTool { get; private set; }
public Tool Tool { get; private set; }
}

我是否遗漏了一些明显的东西?因为我希望当我更改列表框选择(单个)时,它也会更新组的 IsExpanded 属性。我绑定(bind)了更多工具子属性(如 DataContext="{Binding Tool}" 所示),并且这些子属性更新得很好。因此 DataContext 在选择列表框时正确更改。除了这个属性 IsExpanded(应该展开/折叠布局组)。

我做错了什么,以及如何做到这一点,当列表框更改时,轮询 IsExpanded 绑定(bind)以从 IsTool 获取值,并将其设置 (取决于选择)。

最佳答案

依赖属性的 getter 和 setter 必须只包含 GetValueSetValue 调用,因为有两种方法可以获取和设置它们的值:使用 getter 和 setter 以及使用DependencyPropertyDependencyPropertyKey。这就是不执行 setter 中的代码的原因(绑定(bind)不将它们用于依赖属性)。如果您希望在值更改时执行某些代码,请将其指定为 PropertyMetadata 中的 PropertyChangedCallback 回调。

参见 PropertyChangedCallback Delegate on MSDN .

关于c# - 自定义 WPF 绑定(bind)未在列表框选择上更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21444705/

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