簡體   English   中英

WPF 綁定到自定義控件的屬性

[英]WPF Binding to a property of a custom control

我創建了一個自定義控件,這意味着從控件派生的類關聯通過 Themes/Generic.xaml 定義的默認外觀主題。 到現在為止還挺好。

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

自定義控件定義了一個名為 Value 的屬性,我喜歡將其設置為 Binding。 但是沒有任何內容寫入 DataContext 中的綁定屬性。

好吧,這是我到目前為止所得到的:

在Custom Control類中,有如下內容:

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 屬性永遠不會受到影響,永遠不會改變它的值。

我究竟做錯了什么?

為了更新源屬性,綁定到應該是兩種方式:

<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完全是多余的。 當它的值剛剛改變時,您不需要再次設置該屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM