powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Проблема с пониманием "локатора" ViewModel для View...
16 сообщений из 16, страница 1 из 1
Проблема с пониманием "локатора" ViewModel для View...
    #38306092
CoderNSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые форумчане.

По производственной необходимости изучаю и осваиваю WPF с использованием MVVM шаблона.
Не мало статей прочитано, не мало примеров и шаблонов опробовано.
Разобрался с DataBinding, INotifyPropertyChanged, DependencyObject, Command, Trigger, Behavior...

Добрался до момента понимания механизма работы привязки ViewModel к View - в одном из примеров во View следующая часть кода:
....
<UserControl.Resources>
<shell:ModelCommand x:Key="ShowWindow" Action="ShowWindow" Model="{Binding}" />
</UserControl.Resources>

<Button Command="{StaticResource ShowWindow}" Content="Показать окно" />
...
Соответственно, если файл View у меня называется Window1.xaml, то файл ViewModel у меня называется Window1.cs, в котором я собственно пишу метод обработки команды, так вот вопрос в том - каким образом ищется вью-модель для данной вьюшки?
Первые предположения - копать надо в сторону класса ViewLocator.cs из шаблона, который каким-то образом просматривает файлы текущего проекта и по видиому создает объект найденной подходящей View-шки....
Или может кто подскажет где почитать об этом?
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38306556
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoderNSK,

Читай про ICommand и EventCommand. То что ты привел в примере для MVVM не очень (на мой взгляд)
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38307391
CoderNSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну с командами то ладно, прочитаю - но как понять механизм автоматического байндинга ViewModel ко View - по одинаковому имени?!
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38307899
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoderNSK,

Что значит по одинаковому имени? В каком случае у тебя одинаковые имена?
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38307924
CoderNSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм..) ну я же написал - у меня есть в папке Views файл с именем Window1.xaml - в нём xaml разметка.
В папке ViewModels - у меня есть соответствующий файл Window1.cs в котором я пишу логику.
И, соответственно, когда я во View-шке пишу
<UserControl.Resources>
<shell:ModelCommand x:Key="ShowWindow" Action="ShowWindow" Model="{Binding}" />
</UserControl.Resources>
то, метод Action="ShowWindow", привязанный к команде - берётся из файла Windows1.cs, находящийся в папке ViewModels.
То есть по-видимому параметр Model="{Binding}" указывает на автоматический байндинг вью-модели к данной вьюшке по её имени.
В данному случае по имени Window1
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38308776
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoderNSK,

Из твоего текста я понял одно - тебе не помешало бы еще разок и внимательно перечитать про привязку. Такие вещи в WPF надо понимать как дважды два. Без обид только.
Плюс ты задаешь вопрос - при этом не показываешь весь свой код - мы же не можем догадываться когда у тебя происходит и где весь биндинг.
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38310997
CoderNSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм...
Хорошо. Объясняю "на пальцах".
(В приложении скрин с исходным кодом и структурой проекта. Специально создан с нуля простенький проект.)

Поясняю - в данный момент к кнопке Button привязана команда myCommand, которая берётся из переданного в DataContext объекта Main. Main.cs - это и есть моя "одноименная" ViewModel-ка, которая создана для View-шки Main.xaml. Таким образом, я вручную в дата-контексте моей вьюшки прописываю - какую вью-модель брать для данной вьюшки - и этот момент на скрине выделен зелёным овалом.

Так вот что мне надо - мне надо, чтобы для каждой View - её ViewModel автоматически находилась по одинаковому имени, и чтобы при создании каждой новой View не нужно было прописывать каждый раз где лежит ViewModel.

Такой же подход реализован в шаблоне MVC. Но, как это реализовать здесь - я не понимаю.
Вот.
Надеюсь теперь я понятней выразился.
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38311027
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoderNSKТак вот что мне надо - мне надо, чтобы для каждой View - её ViewModel автоматически находилась по одинаковому имени, и чтобы при создании каждой новой View не нужно было прописывать каждый раз где лежит ViewModel.
Размести этот код в code-behind. Ему там самое место. Появится необходимость - вынесешь в отдельный класс. Уверен, в этом случае, желания "автопоиска" модели из вью не возникнет.
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38311107
CoderNSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простите за безграмотность, а что такое " code-behind"?!
Случаем не - Main.xaml.cs - вложенный в Main.xaml?
Если да, то привязанные к View файлы и обработчики, которые можно там писать мне как раз не нужны :(
Мне как раз нужно отделить полностью логику от представления...
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38311129
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoderNSKПростите за безграмотность, а что такое " code-behind"?!
Случаем не - Main.xaml.cs - вложенный в Main.xaml?Да.

CoderNSKЕсли да, то привязанные к View файлы и обработчики, которые можно там писать мне как раз не нужны :(Никто не запрещает работать в code-behind через ICommand.

CoderNSKМне как раз нужно отделить полностью логику от представления...Это всем нужно. Начинать надо с простого - модель в code-behind, представление - в XAML. По необходимости усложнять.
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38311135
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoderNSKНо если сильно хочется, вроде что-то похожее есть в Caliburn. В Prism есть RegionManager, может он подойдёт.
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38311160
CoderNSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, спасибо! попробую поразбираться с этими шаблонами проектирования.
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38311283
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoderNSK,

Если я правильно тебя понял, то ты должен следующее сделать.
У тебя есть главный контейнер - как правило это Окно, в которое ты добавляешь нужные тебе юзерконтролы (вьюхи).
Установи датаконтекст для окна, а все остальные контролы автоматом наследуют этот датаконтекст и тебе не надо будет в каждой вьюхе его указывать
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38312342
CoderNSK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unknownfromrus,

Когда элементы находятся в пределах одного окна/View, то все понятно, но как быть если у меня разные окна, xaml разметка которых описывается в каждом отдельном файле?!
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38312424
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В разных файлах находятся исходники,а не объекты во время исполнения.
...
Рейтинг: 0 / 0
Проблема с пониманием "локатора" ViewModel для View...
    #38312908
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CoderNSK,

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


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