2010-01-19 3 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)); 

내가 XAML이 CheckBox에 바인딩 해요 :

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

을하지만 CheckBoxShowEntireHierarchy을 변경하지 않는 몇 가지 이유 속성을 사용하지만 코드에서 ShowEntireHierarchy 속성이 변경되면 CheckBox이 변경됩니다. 내가 여기서 무엇을 놓치고 있니?

감사합니다.

+0

괜찮아 보입니다. 체크 박스를 토글 할 때 속성이 변경되지 않는다는 것을 어떻게 알 수 있습니까? 거기에 뭔가 다른 속성이 바인딩되어 있고, 다른 것은 응답하지 않습니다? – itowlson

+0

아니요, get 접근 자의 SetValue 줄에 중단 점이 있습니다. CheckBox를 클릭하면 결코 중단되지 않습니다. – Carlo

답변

1

SetValue가 호출되지 않는 이유는 종속성 속성 바인딩이 이 아니고이 CLR 설정자를 통과한다는 것입니다. 바운드 DP는 WPF에 의해 즉 DP 시스템에 의해 관리되는 사적인 "슬롯"에서 직접 "장면 뒤에서"업데이트됩니다.

따라서 확인란이 바뀔 때 DP 으로 설정되었을 가능성이 있습니다. 타격을받지 않는 세터 브레이크 포인트는 걱정할 필요가 없습니다. DP가 업데이트되지 않는다고 믿을만한 다른 이유가있는 경우에만 걱정해야합니다.

바운드 DP의 변경을 중단하려면 속성 메타 데이터에 PropertyChangedCallback을 추가하고 해당 콜백에 중단 점을 설정하십시오.

+0

바로 지금 제가하고있는 일입니다. 감사! (그러나 중단 점은 다른 DP에서 작동하지만 솔루션은 PropertyChangedCallback을 사용합니다.) – Carlo

+1

코드를 통해 DP에 액세스하면 getter 및 setter의 중단 점에 도달합니다 (예 :'myControl.ShowHierarchy = true;'). CLR 래퍼 속성을 통과하므로 * WPF가 setter가 바이 패스 된 DP (바인딩, 애니메이션, 스타일링 등을 통해)를 업데이트하는 경우에만 해당됩니다. 그러면 다른 DP에 중단 점이 표시되는 이유를 알 수 있습니다. – itowlson

+0

아하나. 이해가된다. 정보를 가져 주셔서 감사합니다. – Carlo