H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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;
        }

回答:

更新了tb1里的文本属性

这个代码在哪?

回答:

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

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

回答:

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

本文地址:H5W3 » WPF里绑定在同一普通对象的UI空间为什么会自动更新

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址