我有一個(gè)窗口,其屬性和子元素屬性綁定到一個(gè)名為的類Data:public TerminalOverlay(Data dataContext){ DataInstance = dataContext; DataContext = DataInstance; InitializeComponent();}窗口TerminalOverlay在我的窗口中創(chuàng)建MainWindow,如下:public void MainWindow_Loaded(object sender, EventArgs e){ _terminalOverlayWindow = new TerminalOverlay(_dataInstance); _terminalOverlayWindow.Owner = this; _terminalOverlayWindow.Show();}_dataInstance在 MainWindow 的構(gòu)造函數(shù)中被實(shí)例化,其中的一個(gè)“問(wèn)題”屬性如下:public double ? PosX{ get { return _posX == null ? _defaultPosX : _posX; } set { _posX = value; OnPropertyChanged("PosX"); }}其中OnPropertyChanged的實(shí)現(xiàn)方式如下: public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }該Data對(duì)象從創(chuàng)建TerminalOverlay. Data 對(duì)象還實(shí)現(xiàn)了INotifyPropertyChanged,因此當(dāng)我從主窗口更新 Data 對(duì)象中的屬性時(shí),它們會(huì)反映在窗口中TerminalOverlay。然而,這只是窗口的子元素的情況TerminalOverlay。窗口本身的屬性TerminalOverlay最初設(shè)置為存儲(chǔ)在 Data 類中的值,但它們似乎不會(huì)更新,即使子元素會(huì)更新。我究竟做錯(cuò)了什么?查看可視化樹(shù)我發(fā)現(xiàn)確實(shí)TerminalOverlay.DataContext.TopX更新了,只是沒(méi)有通知窗口更新。
1 回答

智慧大石
TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
你的 posX 是一個(gè) Nullable 變量:他們有“特殊”的綁定藝術(shù)
在這里試試這個(gè)
Left="{Binding PosX, Mode=TwoWay, TargetNullValue=''}"
- 1 回答
- 0 關(guān)注
- 221 瀏覽
添加回答
舉報(bào)
0/150
提交
取消