Форум программистов, компьютерный форум, киберфорум
Наши страницы

C#: WPF, UWP и Silverlight

Войти
Регистрация
Восстановить пароль
 
Chizel
29 / 12 / 4
Регистрация: 19.11.2014
Сообщений: 483
#1

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

12.01.2017, 13:12. Просмотров 211. Ответов 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 во время работы программы (C# WPF):

.NET 4.x Как правильно изменять свойства Model из ViewModel? - C# WPF
Есть модель с 10 свойствами. Есть VM так же с 10 свойствами, дублирующими модель. Есть (некое) хранилище модели, откуда можно её получить...

Model или ViewModel? - C# WPF
Скажите пожалуйста если класс не используется в качестве DataContext-а ни в одном представлении, но во ViewModel-и есть коллекция объектов...

.NET 4.x Уведомления ViewModel при изменении Model - C# WPF
Простейшая программка в аттаче. Вопрос: если свойство во VM завязано так: private DataModel DM; public string SomeText { get { return...

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

Время работы программы - C#
Как просчитать время работы программы, и при окончании программы, вывести в messageBox?????

Время работы программы - C#
Здравствуйте, подскажите пожалуйста как вычислить время работы программы? Думал определять таймером, но вроде бы сказали, что лучше...

5
SharpDeveloper
134 / 131 / 15
Регистрация: 16.02.2012
Сообщений: 453
13.01.2017, 12:41 #2
Вариантов море, но с событиями имхо лучше всего подойдёт.
1
bodynar
168 / 168 / 53
Регистрация: 14.03.2015
Сообщений: 686
Записей в блоге: 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
29 / 12 / 4
Регистрация: 19.11.2014
Сообщений: 483
14.01.2017, 09:40  [ТС] #4
Я уже сделал, именно вот так, через событие, как изначально и додумался:
Цитата Сообщение от Chizel Посмотреть сообщение
Попробую запилить с помощью события. В модели создам его, а в ViewModel подпишу на метод, который будет записывать информацию в Status и обновлять его на вьюхе.
Просто думал, может еще какие варианты есть, хотелось бы полностью следовать MVVM.
0
bodynar
168 / 168 / 53
Регистрация: 14.03.2015
Сообщений: 686
Записей в блоге: 1
Завершенные тесты: 3
14.01.2017, 10:09 #5
Chizel, вы уж простите меня (пока большого опыта в mvvm не имею), но чем такое решение не подходит под рамки данного паттерна?
0
Chizel
29 / 12 / 4
Регистрация: 19.11.2014
Сообщений: 483
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
Привет! Вот еще темы с ответами:

.NET 4.x Подключение dll во время работы программы - C#
Добрый день, каким образом можно подключить библиотеку(dll) уже в скомпилированной и работающей программе. Задумка в следующем, что в...

Рисование фигур во время работы программы - C# WPF
Здравствуйте. Переделываю программу с Windows Forms на WPF, многое пока не ясно. На форме должно быть множество разных фигур (например,...

определение свойств объекта во время работы программы - C#
суть в чем: есть класс - person. В нем можно определять свойства. Но ни названия, ни количество, ни границы этих свойств не определены ...

.NET 4.x Есть ли возможность динамического изменения уровней логгирования во время работы программы - C#
Ситуация следующая: У меня на сервере стоит один из инструментов логгирования (могу поставить log4net, могу NLog, могу прикрутить ещё...


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

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

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