Ich habe einige Probleme, wenn ich versuche, die Höhe und Breite eines Fensters an Eigenschaften in meinem Ansichtsmodell zu binden. Hier ist eine kleine Beispiel-App, um das Problem zu veranschaulichen. Dies ist der Code in app.xaml.xsProbleme beim Binden an Fenster Höhe und Breite
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 dies ist die Ansicht Modell:
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 Getter von WindowHeight und WindowBorderThickness (aber nicht WindowWidth) werden aufgerufen, so dass die Höhe und der Rand des Fensters richtig eingestellt sind, aber nicht die Breite.
ich dann auf die Schaltfläche hinzufügen, die Property für alle Eigenschaften, so dass der View-Modell wie folgt aussieht jetzt auslösen:
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; } }
}
Nun, wenn ich auf die Schaltfläche klicken, wird der Getter von WindowBorderThickness genannt wird, aber nicht die für WindowWidth und WindowHeight. Alles scheint mir sehr komisch und widersprüchlich zu sein. Was vermisse ich?
Haben Sie eine Warnung im Ausgabefenster während des Debuggens? – Drake
Nein, es gibt keine Warnungen. –