Ich habe einige Probleme, wenn ich versuche, die Höhe und Breite eines Fensters an Eigenschaften in meinem View-Modell zu binden. Hier ist eine kleine Beispielanwendung, um das Problem zu veranschaulichen. Dies ist der Code in app.xaml.xs
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MainWindow mainWindow = new MainWindow();
MainWindowViewModel mainWindowViewModel = new MainWindowViewModel();
mainWindow.DataContext = mainWindowViewModel;
mainWindow.Show();
}
}
Dies ist MainWindow.xaml:
<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="{Binding WindowHeight}"
Width="{Binding WindowWidth}"
BorderThickness="{Binding WindowBorderThickness}">
</Window>
Und das ist das Ansichtsmodell:
public class MainWindowViewModel
{
public int WindowWidth { get { return 100; } }
public int WindowHeight { get { return 200; } }
public int WindowBorderThickness { get { return 8; } }
}
Wenn das Programm gestartet wird, werden die Getter von WindowHeight und WindowBorderThickness (aber nicht WindowWidth) aufgerufen, so dass die Höhe und der Rand des Fensters richtig eingestellt werden, aber nicht die Breite.
Dann füge ich eine Schaltfläche hinzu, die PropertyChanged für alle Eigenschaften auslöst, so dass das Ansichtsmodell jetzt wie folgt aussieht:
public class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void TriggerPropertyChanges()
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("WindowWidth"));
PropertyChanged(this, new PropertyChangedEventArgs("WindowHeight"));
PropertyChanged(this, new PropertyChangedEventArgs("WindowBorderThickness"));
}
}
public ICommand ButtonCommand { get { return new RelayCommand(delegate { TriggerPropertyChanges(); }); } }
public int WindowWidth { get { return 100; } }
public int WindowHeight { get { return 200; } }
public int WindowBorderThickness { get { return 8; } }
}
Wenn ich nun auf die Schaltfläche klicke, wird der Getter von WindowBorderThickness aufgerufen, aber nicht der für WindowWidth und WindowHeight. Das kommt mir alles sehr seltsam und inkonsistent vor. Was übersehe ich?