28 Stimmen

Probleme mit der Bindung an Fensterhöhe und -breite

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?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X