У меня есть окно, свойства и свойства дочернего элемента которого связываются с классом с именем 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 eventPropertyChangedEventHandler 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
обновился, просто окно не уведомляется об обновлении.
Кроме того, TerminalOverlay.xaml выглядит следующим образом:
<Window x:Class="Background_Terminal.TerminalOverlay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Background_Terminal"
mc:Ignorable="d"
Title="TerminalOverlay" Height="200" Width="800" Left="{Binding PosX, Mode=OneWay}" Top="{Binding PosY, Mode=OneWay}" AllowsTransparency="True" WindowStyle="None" ResizeMode="NoResize" Background="Transparent" Loaded="TerminalOverlay_Loaded">
<Grid>
<TextBox x:Name="TerminalData_TextBox" BorderThickness="0" FontFamily="Consolas" Background="Transparent" IsReadOnly="True" IsReadOnlyCaretVisible="True" FontSize="{Binding FontSize}" Foreground="{Binding FontColor}" Text="{Binding TerminalDataDisplay, Mode=OneWay}"/>
<TextBox x:Name="Input_TextBox" VerticalAlignment="Bottom" FontSize="{Binding FontSize}" Foreground="{Binding FontColor}" />
</Grid>
</Window>
Свойства, такие как FontSize
в Input_TextBox
, корректно обновляются, но Top
и Left
в свойствах Window не обновляются.