Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DependencyProperty в XAML, своего UserControl 
:(
    Опции темы
Rohoss
Дата 3.5.2011, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Есть свойство зависимостей, которое определено непосредственно в нашем UserControl, в XAML оно не доступно. Однако есть способы манипулировать данным, например
Код

<TextBlock Text=loca:UserControl1.MyProp>

Однако как привязать данное свойство к модели представления, непосредственно в ХAML? Это вообще возможно? Если бы свойство зависимостей было в родительском классе определено, можно было бы так
Код

MyProp="{Binding Source={StaticResource viewModel}, Path=Name}" />                 



--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Kefir
Дата 3.5.2011, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



Совсем не понял чего надо сделать - код определения св-ва в студию. Вместе с примером желаемого использования.
PM MAIL WWW Skype   Вверх
Rohoss
Дата 3.5.2011, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(Kefir @  3.5.2011,  15:32 Найти цитируемый пост)
Совсем не понял чего надо сделать - код определения св-ва в студию. Вместе с примером желаемого использования. 

Да просто всё. Добавляем в проект ЮзерКонтрол и в код-бихайне определяем свойство зависимости. Дальше в ХАМЛ данного ЮзерКонтрола пытаемся достучаться до этого свойства. Достучаться у нас получится, а вот привязать его нет.

Добавлено через 1 минуту и 50 секунд
ну раз нужен код сейчас напишу


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Rohoss
Дата 3.5.2011, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



вот проект

Добавлено через 7 минут и 47 секунд
Здесь надо в ХАМЛе файла UserControl1.xaml привязать свойство IsActive к свойству класса UserControl1ViewModel, IsActiveState

Это сообщение отредактировал(а) Rohoss - 3.5.2011, 16:19

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  WpfApp.rar 39,81 Kb


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
-Mikle-
Дата 3.5.2011, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Одна поправка (видимо ты случайно ошибся)
Код

... = DependencyProperty.Register("IsActive", typeof(bool), typeof(bool))
----------------
... = DependencyProperty.Register("IsActive", typeof(bool), typeof(UserControl1));


Вообще подход неверный тут на мой взгляд. Создавать депенденси проперти в представлении только для того чтоб в XAML привязать его к модели, которая и так всегда одна и та же для нее. Ты можешь так же легко воспользоваться код-бехиндом, чтобы ловить изменения свойства в модели, или, как ты сказал, задиндить его в кодбехинде. Депенденси было бы полезно, если бы привязка осуществлялась снаружи контрола, а для внутренних целей нет смысла мне кажется. Ну если очень хочется, сделай биндинг в кодбехинде, пара строк. Или еще можешь сделать атачед проперти в UserControl1 (принимая в аргументе только тип UserControl1) и воспользоваться им. Тогда сможешь биндить в XAML (но такой подход вообще не к месту на мой взгляд).

PS (если позволите):
Вообще мы на проектах уже давно не используем такой подход (исключая самый первый проект на MVVM). Слишком много гем*роя вылазит. У нас модели не создаются в представлении. Вся иерархия строится на базе моделей представления. Например, есть какие-то главные модели (воркспейсы), в них есть свойства представляющие другие модели, в тех могут быть еще (в принципе ниже трех уровней вроде еще не спускалось). UI строится на иерархии DataContext. На воркспейсные модели определены DataTemplate, так что WPF сам заботится тут о поиске представления (а для силвера 4 мы небольшой прибамбас сделали для этого) так что мы просто показываем экземпляр модели (напимер в диалоговом окне). Модели между собой связываем разными способами (и прямыми и косвенными). В целом, получается не плохо, за исключением очень запутанных и сложных представлений, но таковых меньшинство. Хотя, если бы последние мы связывали через представления, то было бы еще хуже smile


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Rohoss
Дата 3.5.2011, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(-Mikle- @  3.5.2011,  17:25 Найти цитируемый пост)
Одна поправка (видимо ты случайно ошибся)
код C#
1:
2:
3:
... = DependencyProperty.Register("IsActive", typeof(bool), typeof(bool))
----------------
... = DependencyProperty.Register("IsActive", typeof(bool), typeof(UserControl1));



Совершено верно, я побыстрому набросал и заметил когда уже залил проект, там надо
Код

DependencyProperty.Register("IsActive", typeof(bool), typeof(bool))
 = DependencyProperty.Register("IsActive", typeof(bool), typeof(UserControl1));


Добавлено через 11 минут и 44 секунды
Цитата(-Mikle- @  3.5.2011,  17:25 Найти цитируемый пост)
Депенденси было бы полезно, если бы привязка осуществлялась снаружи контрола, а для внутренних целей нет смысла мне кажется.

Ну снаружи я его тоже хотел использовать  smile 

В общем идея была такая, сделать юзерконтрол, который находится в окне и отображает данные по привязанному свойству. Собственно всё тут должно было работать и не составлять никаких неудобств, если бы я к этому представлению не решил добавить модель представления. Хотя, если честно она там трижды не надо, так как никакой логики представления не содержит... Так что собственно уберу её и решу все проблемы.

Ну а по сабжу, похоже физической возможности привязать в ХАМЛе нет? Это уже чисто теоретический интерес...

Добавлено через 14 минут и 43 секунды
Цитата(-Mikle- @  3.5.2011,  17:25 Найти цитируемый пост)
Вся иерархия строится на базе моделей представления


Цитата(-Mikle- @  3.5.2011,  17:25 Найти цитируемый пост)
Вообще мы на проектах уже давно не используем такой подход (исключая самый первый проект MVVM). Слишком много гем*роя вылазит. У нас модели не создаются в представлении. Вся иерархия строится на базе моделей представления. Например, есть какие-то главные модели (воркспейсы), в них есть свойства представляющие другие модели, в тех могут быть еще (в принципе ниже трех уровней вроде еще не спускалось). UI строится на иерархии DataContext. На воркспейсные модели определены DataTemplate, так что WPF сам заботится тут о поиске представления (а для силвера 4 мы небольшой прибамбас сделали для этого) так что мы просто показываем экземпляр модели (напимер в диалоговом окне). Модели между собой связываем разными способами (и прямыми и косвенными). В целом, получается не плохо, за исключением очень запутанных и сложных представлений, но таковых меньшинство. Хотя, если бы последние мы связывали через представления, то было бы еще хуже  

Ну этот подход кажется правильным  smile 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Rohoss
Дата 3.5.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Однако свойство зависимости всё равно использовать не получается, потому что 
Цитата

"Binding" нельзя задать в свойстве "MyProp" типа "Type1". "Binding" можно задать только в параметре DependencyProperty объекта DependencyObject.

 smile 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.