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

标签 c# wpf binding listbox dependencyobject

我对这件看似微不足道的事情感到困惑。我的自定义属性位于 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/

相关文章:

wpf - 绑定(bind) GradientStop 有效但报告错误

c# - 将错误代码大量转换为异常

c# - SignalR 拒绝工作

c# - 拉伸(stretch)列以填充 DataGrid 的所有可用空间

c# - WPF 使用 XAML 将 List<KeyValuePair<,>> 绑定(bind)到 DataGrid

c# - 将数据正确绑定(bind)到组合框并处理其事件

java - 为什么 javaFX Circle.getCenterX 在这种情况下不起作用?

c# - 在 Windows Phone 8.1 Universal Store App 中触发警报?

c# - 无法在自定义验证器中返回自定义错误消息

wpf - 其他控件下面的控件的单击事件