Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Chizel
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 526
1

Как передавать информацию из Model в ViewModel во время работы программы

12.01.2017, 13:12. Просмотров 262. Ответов 5
Метки нет (Все метки)

Здравствуйте! Была у меня написана программка консольная для обработки файлов, ну и решил я ее переписать на WPF с учетом паттерна MVVM. Один из ее классов обрабатывал файлы по очереди из указанной директории, при этом в процессе в консоль писал о своих действиях. Примерно так:
C#
1
Console.WriteLine("Обрабатываю {0}", file);
затем переходил к следующему и снова писал, какой файл обрабатывает перебирая их в цикле.
Этот класс был взят в качестве модели в мое новое приложение. Работает все хорошо, даже действия пишутся в вывод Visual Studio. Но я хочу, внизу моего окна в ListBox в реальном времени писать эти действия, то есть, чтобы во время работы программы было видно, какой файл обрабатывается, после окончания можно было полистать, как логи и поглядеть какие файлы обработаны. И тут я встал в тупик. Можно создать
C#
1
ObservableCollection<string> Status;
в модели и в нее записывать все действия, а потом return'ом ее возвратить в ViewModel и обновить во вьехе. Но тогда я не увижу какой файл обрабатывается в данный момент, а увижу уже логи. Подскажите, как правильно с учетом MVVM реализовать данный функционал?

Добавлено через 31 минуту
Попробую запилить с помощью события. В модели создам его, а в ViewModel подпишу на метод, который будет записывать информацию в Status и обновлять его на вьюхе. Есть еще варианты?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2017, 13:12
Ответы с готовыми решениями:

Как правильно изменять свойства Model из ViewModel?
Есть модель с 10 свойствами. Есть VM так же с 10 свойствами, дублирующими...

Model или ViewModel?
Скажите пожалуйста если класс не используется в качестве DataContext-а ни в...

Уведомления ViewModel при изменении Model
Простейшая программка в аттаче. Вопрос: если свойство во VM завязано так:...

MVVM. Получение данных объекта по сети - в model или во viewmodel?
Здравствуйте! Вникаю в паттерн mvvm, прочитал\посмотрел кучу учебных...

Время работы программы
Как просчитать время работы программы, и при окончании программы, вывести в...

5
SharpDeveloper
135 / 132 / 22
Регистрация: 16.02.2012
Сообщений: 453
13.01.2017, 12:41 2
Вариантов море, но с событиями имхо лучше всего подойдёт.
1
bodynar
170 / 170 / 93
Регистрация: 14.03.2015
Сообщений: 687
Записей в блоге: 1
Завершенные тесты: 3
14.01.2017, 00:20 3
Цитата Сообщение от Chizel Посмотреть сообщение
Но тогда я не увижу какой файл обрабатывается в данный момент, а увижу уже логи.
Не создавайте коллекции внутри вашей "модели" - создайте событие, как посоветовал SharpDeveloper и подпишитесь на них и обрабатывайте как вам надо.
пример из жизни
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class #someName
    {
        ...
        public event EventHandler ItemAdded;
        ....
 
// где-то в методе
            Directory.GetFiles(path).ToList().ForEach(x =>
            {
                var info = new FileInfo(x);
                if (info.Extension.Contains(fileExtension))
                    ItemAdded?.Invoke(info, EventArgs.Empty);
            }
            );
...
}
C#
1
2
3
4
5
6
7
8
9
 // ViewModel
EventHandler itemAdded = (item, e) => /*sender - new founded file, Event - ItemAdded*/
            {
                if (!FoundedFiles.Contains(item as FileInfo))
                {
                    Notification += "\n[" + DateTime.Now.ToString("HH:mm") + "]: " + "Найден файл: " + (item as FileInfo).Name;
                    dispatcher.Invoke(() => FoundedFiles.Add(item as FileInfo)); // TODO: Переработать
                }
            };


Не по теме:

ох, не заметил даты, сорь

1
Chizel
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 526
14.01.2017, 09:40  [ТС] 4
Я уже сделал, именно вот так, через событие, как изначально и додумался:
Цитата Сообщение от Chizel Посмотреть сообщение
Попробую запилить с помощью события. В модели создам его, а в ViewModel подпишу на метод, который будет записывать информацию в Status и обновлять его на вьюхе.
Просто думал, может еще какие варианты есть, хотелось бы полностью следовать MVVM.
0
bodynar
170 / 170 / 93
Регистрация: 14.03.2015
Сообщений: 687
Записей в блоге: 1
Завершенные тесты: 3
14.01.2017, 10:09 5
Chizel, вы уж простите меня (пока большого опыта в mvvm не имею), но чем такое решение не подходит под рамки данного паттерна?
0
Chizel
31 / 14 / 5
Регистрация: 19.11.2014
Сообщений: 526
15.01.2017, 09:16  [ТС] 6
Да всем подходит. Просто хотелось узнать, какие еще варианты есть.
0
15.01.2017, 09:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2017, 09:16

Время работы программы
Здравствуйте, подскажите пожалуйста как вычислить время работы программы?...

Рисование фигур во время работы программы
Здравствуйте. Переделываю программу с Windows Forms на WPF, многое пока не...

Подключение dll во время работы программы
Добрый день, каким образом можно подключить библиотеку(dll) уже в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru