场景:具有只读TextBox和Button的UserControl.只要按下按钮,TextBox.Text就会被修改和更新.
原文链接:https://www.f2er.com/javaschema/281634.html问题:TextControl.Text属性绑定到UserControl.Message依赖项属性,但在UserControl中修改UserControl.Message时不会更新.但是,当实现INotifyPropertyChanged时,目标会更新.
我实际上不需要在依赖属性上实现INotifyPropertyChanged吗?我错过了什么?请参阅演示代码here.
谢谢.
消息属性声明
public static readonly DependencyProperty MessageProperty = DependencyProperty.Register("Message",typeof (string),typeof (TextControl),new FrameworkPropertyMetadata("[WPFApp]" + Environment.NewLine,OnMessageChanged,OnMessageCoerce)); public string Message { get { return (string) GetValue(MessageProperty); } set { SetValue(MessageProperty,value); } } private static object OnMessageCoerce(DependencyObject obj,object baseValue) { return (string) obj.GetValue(MessageProperty) + (string) baseValue; } private static void OnMessageChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) { // do i need to do this? ((TextControl) d).NotifyPropertyChanged("Message"); }
UserControl缩写为XAML
<UserControl x:Class="WPFApp.TextControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="64" d:DesignWidth="355" DataContext="{Binding RelativeSource={RelativeSource Self}}"> <Grid> <TextBox Text="{Binding Message,Mode=OneWay}" ... /> <Button ... /> </Grid> </UserControl>