2016-11-09 63 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的 「Text」 屬性正確結合,但行爲的「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'方法只是讓您的代碼更容易訪問該屬性的常用模式。平臺只是在綁定時設置值。 –