WPF里绑定在同一普通对象的UI空间为什么会自动更新

新手上路,请多包涵

对于这个绑定的过程我的理解是我更新了tb1里的文本属性,值会传递给stu里的NAME,但是由于student这个类没有实现INotifyPropertyChanged这个接口,所以tb2的Text属性不应该会获得更新,但是实际操作起来tb2的TEXT是会更新的,求高手解答一下

XAML代码:

<StackPanel>
        <TextBox x:Name="tb1" Text="{Binding Name,UpdateSourceTrigger=PropertyChanged}"/>
        <TextBox x:Name="tb2" Text="{Binding Name}"/>
</StackPanel>

后台实体类:

public class Student
    {
        public string Name { get; set; }
    }

MainWindow代码:

public MainWindow() {
            InitializeComponent();
 

            Student stu = new Student();
            stu.Name = "Test1";
            tb1.DataContext = stu;
            tb2.DataContext = stu;
        }
阅读 3.6k
3 个回答

更新了tb1里的文本属性

这个代码在哪?

新手上路,请多包涵

如果被绑定的对象不是继承于 DependencyObject 或者实现了 INotifyPropertyChanged,为了能监视其属性的更新,WPF 会借助 PropertyDescriptor 来间接监听

不过值得注意的一点是,这个 PropertyDescriptor 不会知道被绑定对象什么时候不再被使用,于是该对象会长时间驻留在内存里。这是导致内存泄漏的一个原因

新手上路,请多包涵

没错,是不会更新。而且两个都不会更新。你这个只是界面初始化的时候去获取了属性的值。可以先看看WPF深入浅出吧。另外那个属性UpdateSourceTrigger意思是更新源。是将Text的更改传播回Name。和你要的刚好相反

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏