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

Как правильно связать ViewModel с View?

14.07.2014, 13:15. Показов 4616. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как правильно связать ViewModel с View?
1. ViewModel должна быть полем-членом View?
2. ViewModel отдельно от View, но присваивается свойству DataContext?
3. Как-то по-другому?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.07.2014, 13:15
Ответы с готовыми решениями:

Как правильно передать данные из View во ViewModel чтобы не нарушить шаблон MVVM
Здравствуйте. Вопрос такой есть View в него загружается html страница из интернета. И есть обработчик события который выполняется когда...

Как в классе ViewModel выяснить открыто ли View - Window ?
Доброго времени суток. Переписываю behind-код интерфейса соединения с sql-сервером. Состоит интерфейс из трёх диалоговых окон (перечисляю...

Как обновить View при изменении свойства в ViewModel MVVM
View: <DataGrid Grid.Row="0" ItemsSource="{Binding SaleItemData}" AutoGenerateColumns="False" CanUserAddRows="False"> ...

9
 Аватар для monstrilla
53 / 53 / 18
Регистрация: 26.07.2012
Сообщений: 188
22.07.2014, 13:07
2-й вариант
0
30 / 30 / 9
Регистрация: 15.03.2010
Сообщений: 146
06.03.2017, 23:17
Не хотел создавать такую же тему...вопрос немного другой, но очень связан с этим.

Я перегрузил метод OnStartUp в классе App и записал туда следующее:
C#
1
2
3
 var wnd = new MainWindow();
         wnd.DataContext = new MainViewModel();
         wnd.ShowDialog();
С точки зрения MVVM все красиво. View не знает о ViewModel и наоборот. Как запустить другое View с другой ViewModel? (в рамках этого приложения, чтобы по клику мышки запустилось второе окно, например)
и второй в догонку: есть примеры с dependency injection?
0
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
07.03.2017, 00:32
Цитата Сообщение от I_like_C++ Посмотреть сообщение
Как запустить другое View с другой ViewModel?
Можно использовать мессенджер из mvvm-light - где-то на форуме лежал пример
Можно также немного иной сервис для работы с этим (тут как раз di и встретится)
1
3 / 3 / 4
Регистрация: 29.10.2016
Сообщений: 48
07.03.2017, 09:56
I_like_C++, создание новых окон в MVVM это вообще больная тема, много холиваров по этому поводу встречал.
Вот тут 3 варианта рассматривается http://losev-al.blogspot.ru/2013/09/view-mvvm.html
и вот у него еще относительно свеженькое на эту тему http://losev-al.blogspot.ru/20... vvm-2.html
1
 Аватар для bodynar
345 / 307 / 135
Регистрация: 14.03.2015
Сообщений: 1,158
Записей в блоге: 1
07.03.2017, 10:23
Можно, кстати, также создать страничное приложение и просто играть с DataContext у определенных контролов.
subud, по 1 ссылке что-то очень страшное. Какой-то 'code-behind' стиль, это точно wpf?
0
3 / 3 / 4
Регистрация: 29.10.2016
Сообщений: 48
07.03.2017, 10:59
bodynar, страничное приложение это самый очевидный и простой вариант (вообще многоконный интерфейс плохо вписывается в MVVM на мой взгляд)
С окнами никогда просто ,как и с диалоговыми. Типа наследуем интерфейс и бла бла бла. so такие варианты порой пишут, афигеть).

по первой ссылке - там рассмотрены 3 которыми опльзовались на 2013 год, и вполне рабочие.
а то что в кодбихайн, ну вариант 1, находится примерно на уровне OnStartUp.
просто мы обычно один раз определяем
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
using System;
using System.Windows;
using WpfApplication3.ViewModels;
 
namespace WpfApplication3
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        public App()
        {
            try
            {
 
                var mv = new MainWindow()
                {
                    DataContext = new MainWindowsViewModel()
                };
                mv.Show();
            }
            catch (Exception)
            {
 
                throw;
            }
        }
    }
}
а в примере целый класс который связывает несколько View и ViewModel
По мне так всё корректно

Добавлено через 10 минут
Ну и то что кодбихайнд - нет ничего плохого. Частенько приходится расширять функционал или еще что то.
А слова что код бихайнд должен быть чисты - это не есть стандарт. стандарт предусматривает и вынесение вещей относящихся к View в бихайнд, так как далеко не любое поведение можно адекватно реализовать черзе тригеры.
0
07.03.2017, 20:01

Не по теме:

subud, Нет, я конкретно имел в виду, что там в коде генерились кнопки\панели\etc и кидались в окно

0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.03.2017, 00:44
-------------------
0
 Аватар для SharpDeveloper
141 / 138 / 22
Регистрация: 16.02.2012
Сообщений: 453
09.03.2017, 14:32
Порекомендую DevExpress.Mvvm.Free
https://community.devexpress.c... rvice.aspx

Код очень простой:
C#
1
2
3
            var viewModel = new AboutViewModel() { Title = Resources.AboutProgram };
            viewModel.SetParentViewModel(this);
            GetService<IWindowService>("aboutDialog").Show(viewModel);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.03.2017, 14:32
Помогаю со студенческими работами здесь

Binding View к ViewModel
Есть Модель, это компания, с кучей public свойств c OnPropertyChanged(Адрес, телефон, email и т.д.) Есть View, с кучей полей для свойств...

Определить View по типу ViewModel
собственно такой вопрос, у меня есть вм с сервисом, который что-то делает, в данном случае не имеет значения что: public class...

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

Как правильно проектировать ViewModel для UserControl?
Привет всем есть вот такой контрол &lt;UserControl x:Class=&quot;MaxAll.View.Controls.Likes&quot; ...

Связать ViewModel и Style
Здравствуйте, хочу сделать зависимость между значением свойства в ViewModel и значением Setter-а в триггере, т.е.: &lt;Style...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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