我对这件看似微不足道的事情感到困惑。我的自定义属性位于 DevExpresses
类 LayoutGroup
的后代上(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 必须仅包含 GetValue
和 SetValue
调用,因为有两种方法获取和设置它们的值:使用 getter 和 setter 以及使用DependencyProperty
或 DependencyPropertyKey
。这就是为什么 setter 中的代码不会被执行(绑定(bind)不会将它们用于依赖属性)。如果您希望在值更改时执行某些代码,请将其指定为 PropertyMetadata
中的 PropertyChangedCallback
回调。
关于c# - 列表框选择时自定义 WPF 绑定(bind)未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21444705/