Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
82 / 60 / 17
Регистрация: 21.08.2015
Сообщений: 1,075
1

Использование стандартных классов в качесве Модели в паттерне MVVM

24.09.2017, 17:35. Показов 773. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Моя программа должна работать с каталогами.
Суть такова, в каталоге есть много других каталогов, их необходимо распределить по разными каталогам, с учетом пожеланий пользователя.

Могу я использовать класс "DirectoryInfo" в качестве модели данных или мне необходимо создать собственный класс "Directory" ?

В руководствах по использованию паттерна MVVM сказано, что необходимо реализовывать интерфейс "INotifyPropertyChanged"
в классе модели, но насколько я понимаю, в классе "DirectoryInfo" о реализации данного интерфейса речи не идёт.

Разъясните кто может пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2017, 17:35
Ответы с готовыми решениями:

Использование диалогов в MVVM паттерне
Собственно к какой части модели относится диалог? View или ViewModel? И как лучше реализовать? Что...

Создание интерфейса в паттерне MVVM
Доброго времени суток, есть вопрос: разрабатываю приложение с помощью данного паттерна и получается...

Открытие второй формы в mvvm паттерне
Вообщем, открываю вторую форму кодом. Вопрос, как закрыть первую? Пример смотрел отсюда, но...

Использование указателей в качесве аргументов функций
Из целочисленного массива Х(N) все четные элементы записать в массив Y(k). Удалить в массивах...

5
19 / 19 / 9
Регистрация: 09.09.2017
Сообщений: 60
24.09.2017, 22:01 2
Цитата Сообщение от Чипс Посмотреть сообщение
Могу я использовать класс "DirectoryInfo" в качестве модели данных или мне необходимо создать собственный класс "Directory" ?
Полагаю, что в качестве модели лучше выбрать путь к каталогу, а уже в функциях использовать возможности класса DirectoryInfo.

Цитата Сообщение от Чипс Посмотреть сообщение
В руководствах по использованию паттерна MVVM сказано, что необходимо реализовывать интерфейс "INotifyPropertyChanged"
"INotifyPropertyChanged" необходим для того, чтобы при изменении свойства приложение отображало актуальные данные. Но именно модель очень редко оповещает графический интерфейс об изменении, обычно за это отвечает VM.
0
82 / 60 / 17
Регистрация: 21.08.2015
Сообщений: 1,075
25.09.2017, 14:28  [ТС] 3
Цитата Сообщение от NotifyFuture Посмотреть сообщение
Полагаю, что в качестве модели лучше выбрать путь к каталогу,
Это как? не могу понять =(

Цитата Сообщение от NotifyFuture Посмотреть сообщение
"INotifyPropertyChanged" необходим для того, чтобы при изменении свойства приложение отображало актуальные данные.
Тогда такой вопрос.
Объявляем модель.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System.ComponentModel;
using System.Runtime.CompilerServices;
 
namespace MVVM
{
    public class Phone : INotifyPropertyChanged
    {
        private string title;
 
        public string Title
        {
            get { return title; }
            set
            {
                title = value;
                OnPropertyChanged("Title");
            }
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName]string prop = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    }
}
Класс "Phone" реализует "INotifyPropertyChanged"

Далее объявляем класс ApplicationViewModel, который будет представлять модель представления

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Collections.ObjectModel;
 
namespace MVVM
{
    public class ApplicationViewModel : INotifyPropertyChanged
    {
        private Phone selectedPhone;
 
        public ObservableCollection<Phone> Phones { get; set; }
        public Phone SelectedPhone
        {
            get { return selectedPhone; }
            set
            {
                selectedPhone = value;
                OnPropertyChanged("SelectedPhone");
            }
        }
 
        public ApplicationViewModel()
        {
            Phones = new ObservableCollection<Phone>
            {
                new Phone { Title="iPhone 7" },
                new Phone {Title="Galaxy S7 Edge"},
                new Phone {Title="Elite x3"},
                new Phone {Title="Mi5S"}
            };
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName]string prop = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    }
}
Опять интерфейс "INotifyPropertyChanged"

Зачем он нужен в модели и представлении модели?
0
19 / 19 / 9
Регистрация: 09.09.2017
Сообщений: 60
25.09.2017, 18:55 4
Цитата Сообщение от Чипс Посмотреть сообщение
Зачем он нужен в модели и представлении модели?
В данном отрывке не нужен. INotifyPropertyChanged понадобиться тогда, когда вы захотите изменить выбранный элемент (SelectedPhone) из VM.
0
82 / 60 / 17
Регистрация: 21.08.2015
Сообщений: 1,075
26.09.2017, 09:53  [ТС] 5
Цитата Сообщение от NotifyFuture Посмотреть сообщение
Полагаю, что в качестве модели лучше выбрать путь к каталогу, а уже в функциях использовать возможности класса DirectoryInfo.
Разъясните пожалуйста подробней что вы имели виду, а то не хочется начинать работу с плохим проектом.
0
19 / 19 / 9
Регистрация: 09.09.2017
Сообщений: 60
26.09.2017, 11:26 6
Цитата Сообщение от Чипс Посмотреть сообщение
Разъясните пожалуйста подробней что вы имели виду, а то не хочется начинать работу с плохим проектом.
Было приведено следующее описание

Цитата Сообщение от Чипс Посмотреть сообщение
Суть такова, в каталоге есть много других каталогов, их необходимо распределить по разными каталогам, с учетом пожеланий пользователя.
То есть ядро вашего проекта - каталог. Его идентификатором является путь, следовательно его нужно включать в модельный класс.

Путь - набор символов, показывающий расположение файла в файловой системе, адрес каталога.
Путь может быть относительным или абсолютным.

Но уже для работы с моделью вам потребуется методы класса Directory, например, при перемещении каталога.
0
26.09.2017, 11:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2017, 11:26
Помогаю со студенческими работами здесь

Свойства модели в MVVM
Здравствуйте. Если следовать паттерну MVVM стоит ли у модели свойства делать закрытыми от изменения...

MVVM работа со списком в модели
ПОмогите разобраться что куда и как. Возьмем такой пример: окно, при открытии текстового файла...

MVVM Light и оповещения об изменениях модели
В общем есть модель private int _id; private int _contrId; private...

Исходники стандартных классов
Я слышал, что можно как-то посмотреть исходники стандартных классов C#. Подскажите, пожалуйста,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru