2016-11-09 2 views
0

Ich habe eine Verhaltensklasse mit einer Abhängigkeitseigenschaft erstellt, die ich an ein Steuerelement in meiner Sicht (XAML) anhängen möchte. Ich verwende MVVM und ich muss diese angefügte Eigenschaft festlegen, indem Sie es an eine Eigenschaft in meinem ViewModel binden, aber es wird nicht festgelegt. Hier ist eine vereinfachte Version von dem, was ich tun möchte:Angehängte Verhaltenseigenschaft, die nicht durch Bindung in UWP festgelegt wurde

Verhalten Klasse:

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}" /> 

Die Eigenschaft "Text" des TextBlock- bindet richtig, aber die "SomeString" -Eigenschaft des Verhaltens nicht.

Interessanterweise - wenn ich die Verhalten-Eigenschaft auf einen Wert "hart" Code wird es gesetzt. Zum Beispiel:

Irgendwelche Ideen, warum die Bindung an die Verhaltenseigenschaft nicht funktioniert?

Antwort

1

Was erwarten Sie von dem angehängten Verhalten?

Bestimmen Sie, ob die angefügte Eigenschaft funktioniert/funktioniert, indem Sie einen Haltepunkt für die Methoden GetSomeString/SetSomeString festlegen? Wenn dies der Fall ist, wird dies nicht mit der Bindung funktionieren, da die Get/Set-Methoden nicht aufgerufen werden, wenn die Bindung verwendet wird.

Wenn Sie reagieren möchten, wenn sich die angefügte Eigenschaft ändert, unabhängig davon, ob es sich um eine Bindung handelt oder nicht, verwenden Sie PropertyChangedCallback von PropertyMetadata, die im Register Aufruf angegeben ist.

+0

Genau das habe ich gemacht (mit Breakpoints). Ich habe die Callback-Methode hinzugefügt und die Bindung ausgeführt. Gibt es eine Idee, warum die Get/Set-Methoden bei der Verwendung von Bindungen nicht ausgeführt werden? –

+2

Es ist nur die Art, wie die Bindungsinfrastruktur mit Abhängigkeitseigenschaften (normal oder angehängt) funktioniert. Ich glaube, es ist eine Form der internen Optimierung. – ibebbs

+0

Ich glaube auch, dass die 'GetSomeString'-Methode nur ein übliches Muster ist, das es Ihrem Code erleichtert, auf die Eigenschaft zuzugreifen. Die Plattform setzt nur die Werte beim Binden. –

Verwandte Themen