我有一个窗口,其属性和子元素属性绑定到一个名为的类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=''}"
- 1 回答
- 0 关注
- 184 浏览
添加回答
举报
0/150
提交
取消