3

과 함께 변환기를 사용하여 -> isReadOnly의내 파생 AutoCompleteBox 컨트롤은 DependencyProperty를 생성 한 DependencyProperty에

거기에서, 내가 변환기를 통해 값 (T/F)를 설정하기 위해 노력하고있어. 변환기 값을 기반으로 DependencyProperty의 setter에서 중첩 TextBox 스타일을 업데이트하고 싶습니다. 명시 적으로 XAML의 속성을 설정하면 (IsReadOnly = "True") 제대로 작동하고 setter가 실행되어 스타일을 업데이트합니다. 그러나 변환기를 통해이 작업을 수행하면 DependencyProperty의 setter가 실행되지 않습니다. 나는 .. (처음 포스터) 여기에 문제 붙여 넣기 코드 조각있을 것 같다 그래서 나는 통해 실행 빠른 코드를 제공하기 위해 최선을 다하겠습니다 : AutoCompleteBox에

재산권 :

isReadOnly의 = "{바인딩 변환기 = {StaticResource IsReadOnlyVerifier}, ConverterParameter = 'Edit Client'} "

Converter는 사용자의 권한에 따라 true 또는 false를 반환하는 Converter를 호출합니다. 그러나 이것은 등록 된 DependencyProperty의 설정자를 호출하지 않습니다.

.. 이 고전 초보자 잡았다이다

 { 
      if (value) 
      { 
       var style = StyleController.FindResource("ReadOnlyTextBox") as Style; 
       TextBoxStyle = style; 
      } 
      else 
      { 
       TextBoxStyle = null; 
      } 
      SetValue(IsReadOnlyProperty, value); 
     } 

답변

3

세트. 바인딩은 DependencyProperty이라는 대상을 SetValue을 직접 사용하여 설정하며 POCO 속성 설정 메서드를 통해 값을 할당하지 않습니다.

귀하의 IsReadOnly 속성은 다음과 같아야합니다 -

#region public bool IsReadOnly 
    public bool IsReadOnly 
    { 
     get { return (bool)GetValue(IsReadOnlyProperty); } 
     set { SetValue(IsReadOnlyProperty, value); } 
    } 

    public static readonly DependencyProperty IsReadOnlyProperty = 
    DependencyProperty.Register(
     "IsReadOnly", 
     typeof(bool), 
     typeof(MyAutoCompleteBox), 
     new PropertyMetaData(false, OnIsReadOnlyPropertyChanged)); 

    private static void OnIsReadOnlyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     MyAutoCompleteBox source = d as MyAutoCompleteBox; 
     source.OnIsReadOnlyChanged((bool)e.OldValue, (bool)e.NewValue);  
    } 

    private void OnIsReadOnlyChanged(bool oldValue, bool newValue) 
    { 
     TextBoxStyle = newValue ? StyleControlller.FindResource("ReadOnlyTextBox") as Style ? null; 
    } 
    #endregion 

IT는 DependencyProperty를 등록 할 때 종속성 속성은 당신이 PropertyMetaDataPropertyChangedCallback 대리자를 제공해야합니다 설정되어 다른 변경에 영향을 미친다. SetValue을 사용하여이 속성에 값을 할당 할 때마다 호출됩니다.

+0

+1 : 클래식 ... 실제로 잘라 내기/붙여 넣기 답변이 준비되어 있어야합니다. –

+0

+1 : PropertyChangedEvent를 처리하는 몇 가지 예를 보았습니다. "스마트"하고 단순히 DP 설정 기의 스타일 설정 논리를 수행하십시오. Charlie Sheen - Bi-Winning의 말로! 고맙습니다. –

관련 문제