gpt4 book ai didi

WPF:在没有 INotifyPropertyChanged (UserControl) 的情况下更新依赖属性

转载 作者:行者123 更新时间:2023-12-04 08:15:27 25 4
gpt4 key购买 nike

场景:具有只读文本框和按钮的用户控件。每当按下按钮时,TextBox.Text 都会被修改和更新。

问题: TextControl.Text 属性绑定(bind)到 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>

最佳答案

1) 不,您不必为 DependencyProperties 调用 NotifyPropertyChanged。
2)使用相对来源进行绑定(bind):

<TextBox Text="{Binding Message, Mode=OneWay,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}" ... />

附加信息:

若要查找与绑定(bind)相关的错误,请在 Visual Studio 输出窗口中查找绑定(bind)错误消息。它们大多非常清晰,可以快速引导您解决问题。

关于WPF:在没有 INotifyPropertyChanged (UserControl) 的情况下更新依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6144620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com