У меня небольшая проблема архитектуры с MVVM
в WPF. У меня есть View
, который содержит опцию для написания кода или сканирования QRCode
с компьютером s camera. If user choose to not scan the code, I can bind
Команда `и никаких проблем.MVVM архитектура WPF
Проблема возникает, когда пользователь выбирает сканирование qrcode. Когда пользователь нажимает код сканирования, часть экрана сбрасывается, и камера показывает на экране. Я должен сделать это в View
код позади, поэтому код, который я получаю в View
, который не хорош в MVVM.
Вот как View`s код выглядит следующим образом:
private void Scan_Click(object sender, RoutedEventArgs e)
{
if (_finalVideo.IsRunning)
{
_finalVideo.Stop();
}
_finalVideo = new VideoCaptureDevice(_cameraDevices[CamerasList.SelectedIndex].MonikerString);
_finalVideo.NewFrame += (s, a) =>
{
try
{
System.Drawing.Image img = (Bitmap)a.Frame.Clone();
var ms = new MemoryStream();
img.Save(ms, ImageFormat.Bmp);
ms.Seek(0, SeekOrigin.Begin);
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = ms;
bitmapImage.EndInit();
bitmapImage.Freeze();
Dispatcher.BeginInvoke(new ThreadStart(() =>
{
CameraStream.Source = bitmapImage;
ReadQrCode(bitmapImage);
}));
}
catch
{
//exc
}
};
_finalVideo.Start();
}
Как я могу решить эту проблему с MVVM
?
Что заставляет вас думать, что код позади в представлении плох? Совершенно нормально иметь такой код, если он выполняет работу, связанную с пользовательским интерфейсом, - вот что вы делаете. – auburg
Обычно я просто пишу интерфейс для абстрактного такого внешнего ввода/вывода.Таким образом, вы получаете свойство «ICommand Scan», которое при выполнении вызывает метод «Task ReadQrCodeFromCameraAsync» на интерфейсе. В ваших модульных тестах вы выполняете ложную реализацию этого интерфейса. –
Ziriax