我有一个窗口,其属性和子元素属性绑定到一个名为的类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更新了,只是没有通知窗口更新。
智慧大石
相关分类