powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / mvvm light - несколько экземпляров View каждый со своим ViewModel
11 сообщений из 11, страница 1 из 1
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37981315
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток всем!

Открыл для себя mvvm light, действительно удобная вещь в некоторых моментах, но есть одна проблема:

В приложении необходимо дать возможность создать несколько экземпляров одной и той же View, но каждый должен иметь отдельную ViewModel - сколько я не бился придумать как это сделать с использованием ViewModelLocator так и не смог.
Вот подтверждение моих рассуждений(я не один такой) ссылка

Вот по этой ссылке разъясняют как это сделать, но если я правильно понял, то там для каждой View создается отдельный экземпляр Locator'а - какой тогда смысл его использовать вообще? (это уже ненужная сложность).

Если этот сценарий легко реализуется с помощью другого mvvm фреймворка(Prism или какой то еще может быть), то направьте куда копать.
...
Рейтинг: 0 / 0
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37981377
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xpoft2010В приложении необходимо дать возможность создать несколько экземпляров одной и той же View, но каждый должен иметь отдельную ViewModel - сколько я не бился придумать как это сделать с использованием ViewModelLocator так и не смог.Все эти ViewModelLocator, EventAggregator, RegionManager и прочие ненужности не приспособлены к описанной ситуации. Забей на них и делай по обычному.
Код: xml
1.
2.
3.
4.
5.
<UserControl>
    <UserControl.Resources>
       <my:MyViewModel x:Key="Data"/>
    </UserControl.Resources>
</UserControl>
...
Рейтинг: 0 / 0
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37982283
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВАриантов много, Алексей продемонстрировал самый дубовый.Напишу, когда будет время
...
Рейтинг: 0 / 0
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37982862
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормальный фреймворк должен поддерживать навигацию(см prism или caliburn)
Вариантов может быть много, тк xaml много возможностей для этого:

1. Создание ViewModel в xaml, если для у него конструктор без параметров
Код: xml
1.
2.
3.
<UserControl.DataContext>
    <my:MyViewModel/>
</UserControl.DataContext>



2. Implicit datatemplate. Определяем в ресурсе шаблон для view
Код: xml
1.
2.
3.
4.
5.
6.
<DataTemplate DataType="{x:Type vm:MyViewModel}">
<StackPanel>
<TextBox Text={Binding Prop1}/>
<!-- etc -->
</StackPanel>
</DataTemplate>


После этого котролы, которые поддерживают DataTemplate(ContentCOntol, ItemsControl и все его наследники, etc)
будут автоматически выбирать нужный шаблон. Достаточно

Код: c#
1.
2.
3.
myContentControl.DataContext = serviceLocator.Resolver<IViewMode>("myViewModel");
or
myItemsControl.ItemsSource = serviceLocator.Resolver<MyViewModelList>();



Один из вариантов для view first:
1. Регистрируем view,viewmodel в контейнере:
container.RegisterType<IView, MyView>("имяДляНавигации"+"View");
container.RegisterType<IViewModel, MyViewModel>("имяДляНавигации" + "ViewModel");
В Mef это делается гораздо проще только через нужные атрибуты у классов
2. Рисуется сервис навигации с методом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
void Navigate(string uri, params[] parameters)
{
    IView view = serviceLocator.Resolver<IView>("uri"+"View");
    IViewModel viewModel = serviceLocator.Resolver<IViewModel>("uri"+"ViewModel");
viewModel.Initialize(parameters);
   //etc
   shell.Content = view;
   
}



или более простой поход
Код: c#
1.
2.
3.
4.
public class MyView : UserControl, IView

[Dependency]
public MyViewModel { set { this.DataContext = value; }} //viewModel будет создаваться автоматически в di контейнером



Код: c#
1.
shell.Content = serviceLocator.Resolver<MyView>();



И тд.

Есть масса фреймворков с разными подходами
...
Рейтинг: 0 / 0
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37983591
xpoft2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы, посмотрю в сторону Prism
...
Рейтинг: 0 / 0
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37983981
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xpoft2010 создать несколько экземпляров одной и той же View, но каждый должен иметь отдельную ViewModel
Не вижу проблем в классическом mvvm, даже без mvvmlight, prism и прочих поделок.
...
Рейтинг: 0 / 0
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37984467
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skolexpoft2010 создать несколько экземпляров одной и той же View, но каждый должен иметь отдельную ViewModel
Не вижу проблем в классическом mvvm, даже без mvvmlight, prism и прочих поделок.

А что такое классический mvvm? Нечто по мотивам единственной статьи на русском в msdn?
...
Рейтинг: 0 / 0
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37984976
Фотография skole
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa, ты наверное меня с МСУ перепутал
...
Рейтинг: 0 / 0
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37984995
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaskoleпропущено...

Не вижу проблем в классическом mvvm, даже без mvvmlight, prism и прочих поделок.

А что такое классический mvvm? Нечто по мотивам единственной статьи на русском в msdn?То что лежит в основе WPF/SL, а не описано в "единственной статье", и не предложено в различных калабуризмах.
...
Рейтинг: 0 / 0
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37984998
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa
Код: xml
1.
2.
3.
<MyUserControl.DataContext>
    <my:MyViewModel/>
</MyUserControl.DataContext>

Не боишся так делать? Что, если потом захочется сделать так:
Код: xml
1.
<MyUserControl SomeProperty="{Binding SomePath}"/>
...
Рейтинг: 0 / 0
mvvm light - несколько экземпляров View каждый со своим ViewModel
    #37985002
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVa
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
void Navigate(string uri, params[] parameters)
{
    IView view = serviceLocator.Resolver<IView>("uri"+"View");
    IViewModel viewModel = serviceLocator.Resolver<IViewModel>("uri"+"ViewModel");
viewModel.Initialize(parameters);
   //etc
   shell.Content = view;
   
}

Кто-то где-то недавно утверждал, что ServiceLocator - зло. Или мне показалось?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / mvvm light - несколько экземпляров View каждый со своим ViewModel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]