[英]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.