У меня есть приложение WPF, следующее за архитектурой MVVM.Сохраните область экрана в приложении WPF после MVVM
На одном из экранов находится диаграмма, которую необходимо сохранить в виде файла изображения при нажатии кнопки «Сохранить».
Я могу сохранить график, используя приведенный ниже код в код за:
Rectangle rect = new Rectangle(0, 0, 100, 100);
Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(rect.Left, rect.Top, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
bmp.Save(fileName, ImageFormat.Jpeg);
Но мне нужно, чтобы быть в состоянии сделать это в моем ViewModel.
Для этого я прохожу ActualHeight & ActualWidth в качестве параметров команды для замковой команды кнопки в поле ниже образом:
<Button Content="Save" Command="{Binding MyViewModel.SaveCommand">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource DimensionConverter}">
<Binding Path="ActualWidth" ElementName="MyChart"/>
<Binding Path="ActualHeight" ElementName="MyChart"/>
</MultiBinding>
</Button.CommandParameter>
</Button>
В моем преобразователе:
public class DimensionConverter : IMultiValueConverter
{
public object Convert(object[] values, ...)
{
return values.Clone();
}
...
}
Тогда, в логика выполнения команды:
public void OnExecute(object parameter)
{
var values = (object[])parameter;
var width = (double)values[0];
var height = (double)values[1];
...
}
Но, мне также нужно чтобы иметь возможность передавать координаты элемента управления Chart по началу. Это можно сделать с использованием метода PointToScreen. Но как я могу передать их модели просмотра, имея в виду MVVM?
Или есть ли способ, которым я могу захватить область экрана & Сохранить как изображение в архитектуре MVVM?
В качестве возможного способа реализовать это использовать шаблон Messenger (например, Messager в среде MVVM Light) и отправить команду из View в ViewModel с битовой картиной для сохранения. Это все равно будет поддерживать ваше приложение в MVVM. – VitaliyK
@VitaliyK: Не могли бы вы указать мне ссылку или ссылку, откуда я могу получить дополнительную информацию? – Ankit
https://mallibone.com/post/mvvmlight-messenger - как пример – VitaliyK