【发布时间】:2011-09-02 22:19:30
【问题描述】:
场景:具有只读文本框和按钮的用户控件。每当按下按钮时,TextBox.Text 都会被修改和更新。
问题: 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>
【问题讨论】:
标签: wpf wpf-controls binding