gpt4 book ai didi

wpf - 如何在用户控件中定义一个依赖属性,仅从其子控件之一中冒出一个值?

转载 作者:行者123 更新时间:2023-12-02 01:47:33 26 4
gpt4 key购买 nike

我正在创建一个 ToggleSwitchItem 用户控件,其中包含一个 ToggleSwitch 和一个 TextBlock。我定义了一个名为 IsChecked 的依赖属性,我只想用它来公开私有(private) ToggleSwitch 子项的 IsChecked 属性。

但是数据绑定(bind)不起作用...它只是在加载时保持默认值。

我错过了什么?

代码:

public static readonly DependencyProperty IsCheckedProperty =
DependencyProperty.Register(
"IsChecked",
typeof(bool),
typeof(ToggleSwitchItem),
new PropertyMetadata(new PropertyChangedCallback
(OnIsCheckedChanged)));

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

private static void OnIsCheckedChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
ToggleSwitchItem item = (ToggleSwitchItem)d;
bool newValue = (bool)e.NewValue;
item.m_switch.IsChecked = newValue;
}

对于数据绑定(bind),我使用以下方法:

<phone:PhoneApplicationPage.Resources>
<myApp:SharedPreferences x:Key="appSettings"/>
</phone:PhoneApplicationPage.Resources>

IsChecked="{Binding Source={StaticResource appSettings},
Path=SomeProperty, Mode=TwoWay}"

SharedPreferences 类工作正常,因为当完全按照上面的方式绑定(bind)到普通 ToggleSwitch 的 IsChecked 属性时,它可以正常工作。

谢谢!

<小时/>

解决方案(在安东尼的帮助下):

我在用户控件的构造函数中将子切换开关绑定(bind)到我的用户控件,如下所示:

Binding binding = new Binding();
binding.Source = this;
binding.Path = new PropertyPath("IsChecked");
binding.Mode = BindingMode.TwoWay;
m_switch.SetBinding(ToggleSwitch.IsCheckedProperty, binding);

我删除了回调,因为我不再需要它:

public static readonly DependencyProperty IsCheckedProperty =
DependencyProperty.Register(
"IsChecked",
typeof(bool),
typeof(ToggleSwitchItem),
null);

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

最佳答案

我不太明白到目前为止所显示的代码实际上有什么问题,除了您没有显示用户切换开关实际上如何导致 IsChecked 属性改变。

您是否尝试在UserControl内使用绑定(bind):

<ToggleButton IsChecked="{Binding Parent.IsChecked, ElementName=LayoutRoot, Mode=TwoWay}" />

使用此方法,您不需要 OnPropertyChanged 回调。

关于wpf - 如何在用户控件中定义一个依赖属性,仅从其子控件之一中冒出一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8284381/

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