Я пытаюсь отправить сообщение из файла с выделенным кодом View в отдельную ViewModel, чтобы уведомить ViewModel об изменении коллекции.Я понимаю, что использование файла с выделенным кодом нарушает принципы MVVM, но я считаю, что это оправдано в этой ситуации.
У меня есть WindowsForms
элемент управления, который я должен использовать, и поэтому мне нужно WindowsFormsHost
в моем приложении.WindowsFormsHost
находится в файле с выделенным кодом, где я делаю все необходимое для настройки моего WindowsForms
элемента управления (кстати, это элемент управления захватом видео).
Отдельный вид/ ViewModel обрабатывает видео и изображения, снятые этим элементом управления.В начале приложения ViewModel просит модель извлечь все миниатюры изображений / видео, а затем помещает их в ListBox в представлении, которое пользователь может видеть.Вот где я потерялся.
Мне нужно сообщить ViewModel, что новое изображение / видео было захвачено и что представление должно быть обновлено.У меня уже есть список миниатюр, настроенный как ObservableCollection
, и я настроил события OnPropertyChanged
и NotifyCollectionChanged
.
Они должны работать, , если они выполняются.Я заметил, что они никогда не бывают, потому что им ничего не сказано.Я попытался настроить event
, который будет вызываться после успешного сохранения файла, но, поскольку сохранение файла происходит в другом классе (класс обратного вызова, требуемый для элемента управления перехватом), мне нужно иметь экземплярэтот класс в моей ViewModel, чтобы подписаться на событие.
Это означает, что мне нужно создать другой экземпляр в моей ViewModel, который не является экземпляром класса, который выполняет сохранение файла.Есть ли подход, который я могу использовать, который позволит мне обмениваться данными между файлом code-behind и ViewModel изображения / видео после нажатия кнопки пользовательского интерфейса?
По сути, мой желаемый порядок операций таков:
1.) Пользователь открывает приложение и видит видеопоток на одной панели и уже захваченные миниатюры изображений / видео вдругой (они пока хранятся в двух отдельных папках внутри каталога решения)
2.) Пользователь нажимает кнопку «Захватить видео» или «Неподвижное изображение», которая либо начинаетсязахватить видео или сделать снимок текущего видеокадра.
3.) Если щелкнуть захват видео, пользователь должен будет нажать «Стоп», чтобы остановить захват видео.Видео будет сохранено в папке с видео.
4.) Если щелкнуть «Still Image», кадр будет захвачен и сохранен в папке «images».Я создаю BitmapImage
кадра после того, как он захвачен.
5.) ImageViewModel должен быть уведомлен о том, что было сохранено новое изображение / видео, и должен обновитьпанель снятых изображений / видео.
Для меня это звучит как идеальная ситуация для события, но я не могу придумать, как правильно подключить его без создания дополнительных экземпляров классов.Если некоторые примеры кода помогут, пожалуйста, дайте мне знать.