2016-11-09 8 views
0

내보기의 컨트롤 (XAML)에 연결하려는 종속성 속성을 사용하여 동작 클래스를 만들었습니다. MVVM을 사용하고 있는데이 속성을 내 ViewModel의 속성에 바인딩하여 설정해야하지만 설정되지는 않습니다.UWP의 바인딩에 의해 연결된 동작 속성이 설정되지 않았습니다.

행위 등급 :

public static class TestBehavior 
{ 
    public static readonly DependencyProperty SomeStringProperty = 
     DependencyProperty.Register("SomeString", typeof(string), typeof(TestBehavior), new PropertyMetadata("")); 

    public static string GetSomeString(DependencyObject o) 
    { 
     return (string)o.GetValue(SomeStringProperty); 
    } 

    public static void SetSomeString(DependencyObject o, string value) 
    { 
     o.SetValue(SomeStringProperty, value); 
    } 

} 

XAML은 : 여기에 내가 뭘 원하는지의 단순화 된 버전입니다

<TextBlock Text="{Binding ViewModelProperty}" local:TestBehavior.SomeString="{Binding ViewModelProperty}" /> 

TextBlock의의 "텍스트"속성이 제대로 결합은, 그러나 행동의 "SomeString"속성은 그렇지 않습니다.

흥미롭게도 - 동작 속성을 값에 "하드 코드"하면 설정됩니다. 예 :

<TextBlock Text="{Binding TestValue}" local:TestBehavior.SomeString="Foo" /> <!-- This Works --> 

행동 특성 바인딩이 작동하지 않는 이유는 무엇입니까?

답변

1

첨부 된 동작에 대해 어떻게 예상합니까?

GetSomeString/SetSomeString 메서드에 중단 점을 설정하여 연결된 속성이 작동하는지 여부를 확인 하시겠습니까? 그렇다면 바인딩을 사용할 때 Get/Set 메서드가 호출되지 않으므로 바인딩과 함께 작동하지 않습니다.

바인딩을 통한 것인지 여부에 관계없이 연결된 속성이 변경 될 때 반응하려면 Register 호출에 지정된 PropertyMetadataPropertyChangedCallback을 사용하십시오.

+0

정확히 내가했던 것입니다 (중단 점 사용). 콜백 메서드를 추가하고 바인딩에서 실행합니다. 바인딩을 사용할 때 Get/Set 메서드가 실행되지 않는 이유는 무엇입니까? –

+2

바인딩 인프라가 종속성 속성 (정상 또는 첨부)과 함께 작동하는 방식입니다. 나는 그것이 내부 최적화의 어떤 형태라고 생각한다. – ibebbs

+0

또한'GetSomeString' 메소드는 코드가 속성에 더 쉽게 접근 할 수 있도록하는 일반적인 패턴 일뿐입니다. 플랫폼은 바인딩 할 때 값을 설정합니다. –