2013-03-06 3 views
1

부모 컨트롤에서 databound 될 내 WPF usercontrol 종속성 속성을 만들었습니다. 값이 변경되면 알림을 보내려면 내 viewmodel에 INotifyPropertyChanged을 구현했습니다.WPF 사용자 정의 컨트롤에서 종속성 속성을 업데이트하는 방법?

사용자 제어 코드 :

public bool IsVisibile { 
get { return (bool) GetValue(IsVisibileProperty); } 
set { SetValue(IsVisibileProperty, value); }} 

public static readonly DependencyProperty IsVisibileProperty = 
     DependencyProperty.Register("IsVisibile", typeof(bool), typeof(UserControl), 
            new PropertyMetadata(default(bool), VisiblePropertyChangedCallback)); 

    private static void VisiblePropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs) 
    { 
     if (dependencyPropertyChangedEventArgs.NewValue != null) 
     { 
      ((UserControl) dependencyObject).IsVisibile = (bool) dependencyPropertyChangedEventArgs.NewValue; 
     } 

    } 

부모 사용자 컨트롤 사용 :

<uc:UserControl IsVisible="{Binding IsViewModelVisible, UpdateSourceTrigger=PropertyChanged}" 

은 "IsViewModelVisible"변경 후 속성 변경 이벤트 처리기가 호출되지 및 속성이 새로 고쳐지지 않습니다됩니다.

의견이 있으십니까?

답변

1

PropertyChangedCallback에서 IsVisibile 속성이 변경되면 알림을받습니다. 이제 동일한 속성을 다른 시간에 설정하면 무의미합니다.

더 나쁘면 속성을 효과적으로 설정하면 바인딩이 제거됩니다. 따라서 바인딩 원본 속성의 이후 변경 사항에 대한 알림을받지 못합니다.

콜백에서 속성을 다시 설정하지 마십시오. 속성 변경시 일어날 일은 무엇이든하십시오. 컨트롤의 Visibility을 설정하는 것이 좋습니다.

+0

물론 라울도 옳습니다. – Clemens

+0

답장을 보내 주셔서 감사합니다. VM 속성에서 변경 알림을 보낼 때 종속성 속성이 자동으로 업데이트됩니까? – Ash

+0

예, 바인딩이하는 일입니다. – Clemens

0

나는 코드가 맞다고 생각하는데, DP를 일으키지 않는 유일한 원인은 아마도 typeof(YourControlType)을 사용하는 대신 typeof(UserControl)을 설정하는 것일 수 있다는 것입니다. 이것을 시험하고 저에게 피드백을주십시오. 또한 instace을 위해, BoolToVisibilityConverter을 값 변환기를 사용할 수 있습니다,


편집이

예, 클레멘스가 맞다, 사용자가 설정해야하는 속성이 Visibility 속성입니다 ... 캔이 도움이되기를 바랍니다.

관련 문제