У меня есть некоторые проблемы, когда я пытаюсь связать высоту и ширину окна с свойствами в моей модели представления. Вот небольшое примерное приложение, чтобы проиллюстрировать проблему. Это код в 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();
}
}
Это 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>
И это модель представления:
public class MainWindowViewModel
{
public int WindowWidth { get { return 100; } }
public int WindowHeight { get { return 200; } }
public int WindowBorderThickness { get { return 8; } }
}
Когда программа запускается, вызываются геттеры WindowHeight и WindowBorderThickness (но не WindowWidth), поэтому высота и граница окна установлены правильно, но не ширина.
Затем я добавляю кнопку, которая вызовет PropertyChanged для всех свойств, так что теперь модель вида выглядит следующим образом:
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; } }
}
Теперь, когда я нажимаю кнопку, вызывается получатель WindowBorderThickness, но не те, что для WindowWidth и WindowHeight. Все это кажется мне очень странным и непоследовательным. Что мне не хватает?