Это может быть трудно сделать с «чистой» реализацией MVVM, потому что вам нужно знать, в каком направлении произошло изменение размера (по горизонтали или по вертикали).Обратите внимание, что если оба изменяются одновременно (т. Е. Пользователь изменяет размер, перетаскивая угол), вам нужно будет решить, какой из них использовать.
В вашей ViewModel у вас, вероятно, будет свойство AspectRatio.
В вашем View вы, скорее всего, переопределите событие OnRenderSizeChanged.В этом случае дело вкуса, выполняете ли вы работу в представлении, используя свойство из ViewModel, или передаете значение свойству в ViewModel, чтобы выполнить работу, и связываетесь с новыми значениями.
Пример 1: Выполните работу здесь
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
if (sizeInfo.WidthChanged)
{
this.Width = sizeInfo.NewSize.Height * mViewModel.AspectRatio;
}
else
{
this.Height = sizeInfo.NewSize.Width * mViewModel.AspectRatio;
}
}
Пример 2: Выполните работу в ViewModel
View.xaml.cs
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
if (sizeInfo.WidthChanged)
{
viewModel.AspectWidth = sizeInfo.NewSize.Width;
}
else
{
viewModel.AspectHeight = sizeInfo.NewSize.Height;
}
}
ViewModel.cs
public Double AspectWidth
{
get { return mAspectWidth; }
set
{
// Some method that sets your property and implements INotifyPropertyChanged
SetValue("AspectWidth", ref mAspectWidth, value);
SetValue("AspectHeight", ref mAspectHeight, mAspectWidth * mAspectRatio);
}
}
public Double AspectHeight
{
get { return mAspectHeight; }
set
{
// Some method that sets your property and implements INotifyPropertyChanged
SetValue("AspectHeight", ref mAspectHeight, value);
SetValue("AspectWidth", ref mAspectWidth, mAspectHeight* mAspectRatio);
}
}
И ваше представление(например, 2) привязывает ширину и высоту окна к свойствам AspectWidth и AspectHeight в модели представления.
View.xaml
<Window Width="{Binding AspectWidth}"
Height="{Binding AspectHeight}">
</Window>
Таким образом, в любом случае вы переопределяете OnRenderSizeChanged.Детали того, как вы реализуете этот метод, соответствуют вашим вкусам.Я предполагаю, что Пример №2 ближе к чистому «MVVM», но в этом случае он также может быть излишним.