2017-10-28 343 views
0

我創建了一個自定義控件,表示從控制關聯通過Themes/Generic.xaml定義的默認不尋常主題的派生類。到現在爲止還挺好。WPF綁定到自定義控件的屬性

現在,我想使用控件像任何其他的主要WPF控件(文本框,列表框,標籤,文本塊,...)並綁定到定義的屬性。

自定義控件定義了一個名爲Value的屬性,我喜歡將Binding設置爲。但是沒有任何東西寫到DataContext的綁定屬性中。

嗯,這裏就是我這麼遠:

在自定義控件類中,有如下:

public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
    "Value", typeof(string), typeof(MyClass), 
    new FrameworkPropertyMetadata("", new PropertyChangedCallback(onValuePropertyChangedCallback))); 

private static void onValuePropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs args) 
{ 
    MyClass myClass = (MyClass)sender; 
    myClass.Value = (string)args.NewValue; 
} 

public string Value 
{ 
    get { return (string) GetValue(ValueProperty); } 
    set { SetValue(ValueProperty, value); } 
} 

當我使用的控制,這就像

<local:MyClass MyValue="{Binding CurrentValue}" ... /> 

DataContext的CurrentValue屬性從不受影響,從不改變它的值。

我在做什麼錯?

回答

0

的結合,應該是雙向的,以更新源屬性:

<local:MyClass Value="{Binding CurrentValue, Mode=TwoWay}" ... /> 

如果你想這是默認的綁定模式,您可以在您註冊的屬性設置相應的標誌:

public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
    nameof(Value), typeof(string), typeof(MyClass), 
    new FrameworkPropertyMetadata(
     "", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 

public string Value 
{ 
    get { return (string)GetValue(ValueProperty); } 
    set { SetValue(ValueProperty, value); } 
} 

請注意,您的onValuePropertyChangedCallback是完全多餘的。當它的值剛剛改變時,不需要再次設置屬性。

+0

非常感謝!我假設,默認情況下BindingMode是TwoWay。現在,我已經設置了BindingMode,一切正常。再次感謝! – Elex