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

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

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

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

Если этот сценарий легко реализуется с помощью другого mvvm фреймворка(Prism или какой то еще может быть), то направьте куда копать.
...
Рейтинг: 0 / 0
03.10.2012, 11:11
    #37981377
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mvvm light - несколько экземпляров View каждый со своим ViewModel
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
03.10.2012, 16:21
    #37982283
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mvvm light - несколько экземпляров View каждый со своим ViewModel
ВАриантов много, Алексей продемонстрировал самый дубовый.Напишу, когда будет время
...
Рейтинг: 0 / 0
04.10.2012, 07:01
    #37982862
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mvvm light - несколько экземпляров View каждый со своим ViewModel
Нормальный фреймворк должен поддерживать навигацию(см 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
04.10.2012, 14:07
    #37983591
xpoft2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mvvm light - несколько экземпляров View каждый со своим ViewModel
Спасибо за ответы, посмотрю в сторону Prism
...
Рейтинг: 0 / 0
04.10.2012, 16:03
    #37983981
skole
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mvvm light - несколько экземпляров View каждый со своим ViewModel
xpoft2010 создать несколько экземпляров одной и той же View, но каждый должен иметь отдельную ViewModel
Не вижу проблем в классическом mvvm, даже без mvvmlight, prism и прочих поделок.
...
Рейтинг: 0 / 0
04.10.2012, 20:41
    #37984467
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mvvm light - несколько экземпляров View каждый со своим ViewModel
skolexpoft2010 создать несколько экземпляров одной и той же View, но каждый должен иметь отдельную ViewModel
Не вижу проблем в классическом mvvm, даже без mvvmlight, prism и прочих поделок.

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

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

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

Не боишся так делать? Что, если потом захочется сделать так:
Код: xml
1.
<MyUserControl SomeProperty="{Binding SomePath}"/>
...
Рейтинг: 0 / 0
05.10.2012, 11:05
    #37985002
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mvvm light - несколько экземпляров View каждый со своим ViewModel
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
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / mvvm light - несколько экземпляров View каждый со своим ViewModel / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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