Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 32

[WPF] Реализация openFileDialog в соответствии с MVVM

20.02.2019, 17:51. Показов 5677. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите как должна быть правильно реализована возможность чтения файлов с помощью OpenFileDialog в соответствии с MVVM? Правильно ли я понимаю, что можно в модели реализовать метод openFileDialog и вызывать его командой или это ошибочный подход? Тему WPF команды и MVVM. Часть 1. [WPF, Элд Хасп], Метанит и Стек изучал, но как то слабо понял. Если кому то не сложно объяснить - буду благодарен!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.02.2019, 17:51
Ответы с готовыми решениями:

WPF команды и MVVM. Часть 2. Всплытие команд. Реализация команды для списка элементов [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html На практике часто встречаются случаи когда команда и кнопка...

Реализация команд в wpf на mvvm light toolkit
Здравствуйте. Подскажите, пожалуйста, как можно реализовать команды в wpf на mvvm light toolkit? Желательно с примерами кода или...

WPF команды и MVVM. Часть 1. [WPF, Элд Хасп]
Тема из цикла https://www.cyberforum.ru/wpf-silverlight/thread2384523.html Для использования и создания WPF команд в Net предусмотрен...

6
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,553
20.02.2019, 18:41
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Kurupt,

примерно так:

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
public interface IDialogService
{
     string OpenFileDialog(string path);
}
 
public class DialogService : IDialogService
{
    public string OpenFileDialog(string path)
    { 
          //здесь создаешь диалог и выбираешь файл, возвращаешь путь к нему
          return path;
    }
}
 
public class MyViewModel : INotifyOfPropertyChanged
{
    private IDialogService dialogService;
    
    public MyViewModel(IDialogService dialogService)
    {
          this.dialogService = dialogService;
    }
 
    public ICommand OpenFileDialogCommand
    { 
         get { new RelayCommand(()=> OpenFile()); }
    }
   
    private void OpenFile()
    {
         var path = dialogService.OpenFileDialog("C:\\");
         ...
    }
}
6
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
20.02.2019, 23:45
Цитата Сообщение от Kurupt Посмотреть сообщение
как должна быть правильно реализована возможность чтения файлов с помощью OpenFileDialog в соответствии с MVVM
Для чего нужен OpenFileDialog?

Для визуального интерфейса с пользователем. Тогда при чём здесь Model, которая (теоретически) находится на удалённом сервере? С кем там этот диалог буде общаться?

OpenFileDialog - это часть View. Вызвать его можно из VM. Один из примеров дал hamin.
1
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 32
26.02.2019, 23:08  [ТС]
Элд Хасп, и еще вопрос в догонку - как привязать класс из примера MyViewModel в Code Behind View, ведь конструктор класса параметризированный. Получается, что во View должна быть дополнительная логика? А как тогда сделать то же самое из XAML? Также нашел на форуме информацию о том, что в таких ситуациях можно воспользоваться Dependency injection, верно?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
27.02.2019, 01:18
Цитата Сообщение от Kurupt Посмотреть сообщение
еще вопрос в догонку - как привязать класс из примера MyViewModel в Code Behind View, ведь конструктор класса параметризированный. Получается, что во View должна быть дополнительная логика? А как тогда сделать то же самое из XAML?
В XAMl объявляется ViewModel DataDesigned - Модель представления времени разработки. ViewModel не всякую можно привязать в XAML - её объявление в CB вполне допустимо.

Примеры: Пример реализации WPF+MVVM приложения
1
0 / 0 / 0
Регистрация: 15.12.2015
Сообщений: 32
27.02.2019, 21:55  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Примеры: Пример реализации WPF+MVVM приложения
может плохо искал, но в итоге не нашел в примере объявления VM (у которой конструктор с параметрами) в CD вью.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
27.02.2019, 22:28
Цитата Сообщение от Kurupt Посмотреть сообщение
может плохо искал, но в итоге не нашел в примере объявления VM (у которой конструктор с параметрами) в CD вью.
Я там имел ввиду другое.
Что отдельно создаётся VMDD и VM.
VMDD объявляется в XAML с префиксом "d:".
VM можно объявить в XAML (если объявление без параметрическое) можно в CD окна, можно CB App.

Здесь в разделе таких примеров мало, так как примеры очень простые. Но в реальности так делается. Я практически всегда объявляю VM в CB окна даже если это безпараметрическое объявление.

Добавлено через 10 минут
Примеры которые нашёл в разделе:

Перенести текст с одного label на label в другом окне

Привязка координат одного Shape относительно другого

Datagrid сохранение изменений

Добавлено через 2 минуты
В последнем примере в XAML используется безпараметрический конструктор VM в качестве VMDD.
А в CB реальная VM создаётся через статический конструктор с загрузкой данных из файла.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.02.2019, 22:28
Помогаю со студенческими работами здесь

Чем заменить OpenFileDialog в MVVM?
В WPF как оказывается такой функции нет. Подскажите пожалуйста каким образом сделать аналог? Может быть есть какие нибудь готовые аналоги?...

Как работать с OpenFileDialog в WPF?
Есть слайдшоу, где пользователь сам выбирает откуда брать картинку. Нужно 1)Проверить расширение выбранного файла, 2)Создать новый...

WPF MVVM
Привет всем! Изучаю патерн MVVM. Не могу понять как реализовать ее, если допустим мне необходимо одно и тоже окно использовать для разных ...

WPF OpenFileDialog открытие русского текста
При открытии файла с русским текстом ,вместо текста какие-то символы непонятные.Подскажите пожалуйста,как это исправить. private void...

WPF: как загрузить картинку из OpenFileDialog?
точнее как сохранить выбранный файл в Image? у меня такой код... private void Button_Click(object sender, RoutedEventArgs e) {...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru