我正在以下最小WPF应用程序中试验NotifyOnSourceUpdated
属性:
XAML文件:
<Window x:Class="notify_on_source_updated.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:notify_on_source_updated"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Button x:Name="myButton" Click="myButton_Click" />
</Window>
程式码后置:
namespace notify_on_source_updated
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public string SourceText {get; set;}
public MainWindow()
{
InitializeComponent();
SourceText = "test";
Binding binding = new Binding();
binding.Source = SourceText;
binding.NotifyOnSourceUpdated=true;
myButton.SourceUpdated += myButton_SourceUpdated;
myButton.SetBinding(ContentControl.ContentProperty, binding);
}
private void myButton_Click(object sender, RoutedEventArgs e)
{
SourceText = "changed";
}
private void myButton_SourceUpdated(object sender, DataTransferEventArgs e)
{
MessageBox.Show("Updated!");
}
}
}
有两件事我很困惑:
1.当我单击按钮时,它的Content
未更新为字符串"changed"
1.我附加到myButton.SourceUpdated
事件的处理程序没有被触发,并且我从来没有得到消息框。
为什么上面的两种行为没有发生?我在这里遗漏了什么?
1条答案
按热度按时间wsewodh21#
您需要指定绑定路径:
然后,若要更新
Button
,您必须实作INotifyPropertyChanged
界面,并引发数据系结来源属性的PropertyChanged
事件:另一个选项是显式更新绑定:
SourceUpdated
事件发生在输入控件的值从绑定目标传输到绑定源时,例如,在数据绑定的TextBox
中键入内容时。