gpt4 book ai didi

c# - 依赖属性更改时未引发 WPF 事件

转载 作者:行者123 更新时间:2023-12-02 19:42:23 24 4
gpt4 key购买 nike

我有以下基于“重选项”的自定义控件:this链接:

public partial class SelectableContentControl : ContentControl
{
public SelectableContentControl()
{
InitializeComponent();
var isCheckedDesc = DependencyPropertyDescriptor.FromProperty(IsCheckedProperty, typeof(SelectableContentControl));
isCheckedDesc.AddValueChanged(this, IsCheckedPropertyChanged);
}

public bool IsChecked
{
get { return (bool)GetValue(IsCheckedProperty); }
set { SetValue(IsCheckedProperty, value); }
}

public static readonly DependencyProperty IsCheckedProperty =
DependencyProperty.Register("IsChecked", typeof(bool),
typeof(SelectableContentControl), new PropertyMetadata(false));

private void IsCheckedPropertyChanged(object sender, EventArgs e)
{
var selectable = Content as IAmSelectable;
if (selectable != null) selectable.IsSelected = IsChecked;
}
}

SelectableContentControl定义的样式如下:

<Style TargetType="{x:Type controls1:SelectableContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls1:SelectableContentControl}">
<CheckBox IsChecked="{TemplateBinding IsChecked}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

...以及我的用法:

<controls:SelectableContentControl Grid.Row="2" Content="{Binding Dummy}" IsChecked="{Binding Dummy.IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

我希望每当 UI 上的 IsChecked 值发生更改时都调用 IsCheckedPropertyChanged,但这并没有发生。有人看到我错过了什么吗?

最佳答案

TemplateBindingOneWay 模式下工作,这意味着该值仅在源到目标方向上更新(您的控件是源,并且 模板内的 CheckBox 目标)。如果您希望绑定(bind)在 TwoWay 模式下工作,则应使用普通的 Binding:

<ControlTemplate TargetType="{x:Type controls1:SelectableContentControl}">
<CheckBox IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}}" />
</ControlTemplate>

请注意,您无需在绑定(bind)上指定 Mode=TwoWay,因为 CheckBox.IsChecked 属性默认以双向模式绑定(bind)。

参见this question了解更多详细信息。

关于c# - 依赖属性更改时未引发 WPF 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37664136/

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