|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
Здравствуйте, уважаемые форумчане. По производственной необходимости изучаю и осваиваю 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-шки.... Или может кто подскажет где почитать об этом? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2013, 12:42 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
CoderNSK, Читай про ICommand и EventCommand. То что ты привел в примере для MVVM не очень (на мой взгляд) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2013, 16:49 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
Ну с командами то ладно, прочитаю - но как понять механизм автоматического байндинга ViewModel ко View - по одинаковому имени?! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2013, 15:17 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
CoderNSK, Что значит по одинаковому имени? В каком случае у тебя одинаковые имена? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2013, 10:37 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
хм..) ну я же написал - у меня есть в папке 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2013, 10:51 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
CoderNSK, Из твоего текста я понял одно - тебе не помешало бы еще разок и внимательно перечитать про привязку. Такие вещи в WPF надо понимать как дважды два. Без обид только. Плюс ты задаешь вопрос - при этом не показываешь весь свой код - мы же не можем догадываться когда у тебя происходит и где весь биндинг. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2013, 21:58 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
Хм... Хорошо. Объясняю "на пальцах". (В приложении скрин с исходным кодом и структурой проекта. Специально создан с нуля простенький проект.) Поясняю - в данный момент к кнопке Button привязана команда myCommand, которая берётся из переданного в DataContext объекта Main. Main.cs - это и есть моя "одноименная" ViewModel-ка, которая создана для View-шки Main.xaml. Таким образом, я вручную в дата-контексте моей вьюшки прописываю - какую вью-модель брать для данной вьюшки - и этот момент на скрине выделен зелёным овалом. Так вот что мне надо - мне надо, чтобы для каждой View - её ViewModel автоматически находилась по одинаковому имени, и чтобы при создании каждой новой View не нужно было прописывать каждый раз где лежит ViewModel. Такой же подход реализован в шаблоне MVC. Но, как это реализовать здесь - я не понимаю. Вот. Надеюсь теперь я понятней выразился. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 12:24 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
CoderNSKТак вот что мне надо - мне надо, чтобы для каждой View - её ViewModel автоматически находилась по одинаковому имени, и чтобы при создании каждой новой View не нужно было прописывать каждый раз где лежит ViewModel. Размести этот код в code-behind. Ему там самое место. Появится необходимость - вынесешь в отдельный класс. Уверен, в этом случае, желания "автопоиска" модели из вью не возникнет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 12:38 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
Простите за безграмотность, а что такое " code-behind"?! Случаем не - Main.xaml.cs - вложенный в Main.xaml? Если да, то привязанные к View файлы и обработчики, которые можно там писать мне как раз не нужны :( Мне как раз нужно отделить полностью логику от представления... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 13:04 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
CoderNSKПростите за безграмотность, а что такое " code-behind"?! Случаем не - Main.xaml.cs - вложенный в Main.xaml?Да. CoderNSKЕсли да, то привязанные к View файлы и обработчики, которые можно там писать мне как раз не нужны :(Никто не запрещает работать в code-behind через ICommand. CoderNSKМне как раз нужно отделить полностью логику от представления...Это всем нужно. Начинать надо с простого - модель в code-behind, представление - в XAML. По необходимости усложнять. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 13:15 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
CoderNSKНо если сильно хочется, вроде что-то похожее есть в Caliburn. В Prism есть RegionManager, может он подойдёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 13:18 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
Хорошо, спасибо! попробую поразбираться с этими шаблонами проектирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 13:28 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
CoderNSK, Если я правильно тебя понял, то ты должен следующее сделать. У тебя есть главный контейнер - как правило это Окно, в которое ты добавляешь нужные тебе юзерконтролы (вьюхи). Установи датаконтекст для окна, а все остальные контролы автоматом наследуют этот датаконтекст и тебе не надо будет в каждой вьюхе его указывать ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2013, 14:25 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
unknownfromrus, Когда элементы находятся в пределах одного окна/View, то все понятно, но как быть если у меня разные окна, xaml разметка которых описывается в каждом отдельном файле?! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 11:56 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
В разных файлах находятся исходники,а не объекты во время исполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 12:38 |
|
Проблема с пониманием "локатора" ViewModel для View...
|
|||
---|---|---|---|
#18+
CoderNSK, И? Вообще не вижу никаких проблем. А как по твоему делают приложения с несколькими окнами в WPF (пример плавающих панелей). У тебя есть так называемая входная точка из App в которой ты можешь создавать сколь угодно много окон и указывать для них датаконтекст - в твоем случае один и тот же датаконтекст - он же является экземпляром класса моделвью. Но я подозреваю у тебя все равно в приложении есть какое-то главное окно ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2013, 16:13 |
|
|
start [/forum/topic.php?fid=21&fpage=29&tid=1441354]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 164ms |
0 / 0 |