Я создаю пользовательский элемент управления ToggleSwitchItem, который содержит ToggleSwitch и TextBlock. Я определил свойство зависимостей под названием IsChecked, которое я просто хочу использовать для предоставления свойства IsChecked частного дочернего элемента ToggleSwitch.
Но привязка данных не работает ... При загрузке просто остается значение по умолчанию.
Чего мне не хватает?
Код:
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;
}
для привязки данных, я использую следующее:
<phone:PhoneApplicationPage.Resources>
<myApp:SharedPreferences x:Key="appSettings"/>
</phone:PhoneApplicationPage.Resources>
IsChecked="{Binding Source={StaticResource appSettings},
Path=SomeProperty, Mode=TwoWay}"
Класс SharedPreferences работает нормально, так как он без проблем работает, когда привязан к простому ванильному свойству IsChecked ToggleSwitch точно так же, как указано выше.
Спасибо!
РЕШЕНИЕ (с помощью Энтони):
Я привязываю свой дочерний тумблер к своему пользовательскому элементу управления в конструкторе пользовательского элемента управления следующим образом:
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);
}
}