为了账号安全,请及时绑定邮箱和手机立即绑定

发送 INotifyPropertyChanged 时窗口属性数据绑定不更新,但子元素属性是

发送 INotifyPropertyChanged 时窗口属性数据绑定不更新,但子元素属性是

C#
猛跑小猪 2023-04-29 09:59:55
我有一个窗口,其属性和子元素属性绑定到一个名为的类Data:public TerminalOverlay(Data dataContext){    DataInstance = dataContext;    DataContext = DataInstance;    InitializeComponent();}窗口TerminalOverlay在我的窗口中创建MainWindow,如下:public void MainWindow_Loaded(object sender, EventArgs e){    _terminalOverlayWindow = new TerminalOverlay(_dataInstance);    _terminalOverlayWindow.Owner = this;    _terminalOverlayWindow.Show();}_dataInstance在 MainWindow 的构造函数中被实例化,其中的一个“问题”属性如下:public double ? PosX{    get    {        return _posX == null ? _defaultPosX : _posX;    }    set    {        _posX = value;        OnPropertyChanged("PosX");    }}其中OnPropertyChanged的实现方式如下: public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }该Data对象从创建TerminalOverlay. Data 对象还实现了INotifyPropertyChanged,因此当我从主窗口更新 Data 对象中的属性时,它们会反映在窗口中TerminalOverlay。然而,这只是窗口的子元素的情况TerminalOverlay。窗口本身的属性TerminalOverlay最初设置为存储在 Data 类中的值,但它们似乎不会更新,即使子元素会更新。我究竟做错了什么?查看可视化树我发现确实TerminalOverlay.DataContext.TopX更新了,只是没有通知窗口更新。
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

你的 posX 是一个 Nullable 变量:他们有“特殊”的绑定艺术

在这里试试这个

Left="{Binding PosX, Mode=TwoWay, TargetNullValue=''}"


查看完整回答
反对 回复 2023-04-29
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信