2010-01-19 2 views
1

Я это DependencyProperty:флажок не устанавливать свойство зависимостей

public bool ShowEntireHierarchyEx 
{ 
    get { return (bool)GetValue(ShowEntireHierarchyExProperty); } 
    set { SetValue(ShowEntireHierarchyExProperty, value); } 
} 

public static readonly DependencyProperty ShowEntireHierarchyExProperty = 
    DependencyProperty.Register("ShowEntireHierarchyEx", typeof(bool), typeof(CustomizeStatisticsStyleControl), new UIPropertyMetadata(false)); 

И я привязывая его к этому CheckBox в XAML:

<CheckBox Margin="16,5,0,0" x:Name="checkBoxHierarcy" 
      IsChecked="{Binding ElementName=customizeStatisticsStyle, Path=ShowEntireHierarchyEx, Mode=TwoWay}"> 
    S_how entire gate hierarchy 
</CheckBox> 

Но по какой-то причине CheckBox не меняет ShowEntireHierarchy свойство, но если свойство ShowEntireHierarchy изменяется в коде, то CheckBox действительно изменяется. Что мне здесь не хватает?

Спасибо!

+0

Все в порядке. Как вы знаете, что свойство не меняется при переключении флажка? Есть ли что-то еще, связанное с собственностью, и что другая вещь не отвечает? – itowlson

+0

Нет, у меня есть точка разрыва прямо в строке SetValue в get accessor, когда я нажимаю CheckBox, она никогда не ломается там. – Carlo

ответ

1

Причина, по которой SetValue не вызывается, заключается в том, что привязки свойств зависимостей do NOT проходят через сеттер CLR. Связанный DP обновляется «за кулисами» WPF, то есть непосредственно в частном «слоте», управляемом системой DP.

Поэтому вероятно, что ваш DP равен, если установлен флажок. Точка прерывания сеттера, которая не попадает, не должна вас беспокоить. Вы должны только беспокоиться, если у вас есть еще одна причина полагать, что DP не обновляется.

Чтобы разбить изменения связанного DP, добавьте PropertyChangedCallback в свои метаданные свойств и установите точку останова в этом обратном вызове.

+0

Именно это я и делал прямо сейчас. Благодаря! (Однако точки останова работают на другом DP, но решение IS использует PropertyChangedCallback в любом случае). – Carlo

+1

Точки останова в геттере и сеттере будут удалены, если вы получите доступ к DP через код (например, 'myControl.ShowHierarchy = true;'), потому что те * делают * просматривают свойство оболочки CLR. Только когда WPF обновляет DP (посредством привязки, анимации, стилизации и т. Д.), Что сеттер обойдется. Это может объяснить, почему вы видите, что точки останова попадают на другие ПП - надеюсь, теперь это имеет больше смысла! – itowlson

+0

О, я вижу, это имеет смысл. Большое спасибо за информацию! – Carlo

Смежные вопросы