![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| fromrus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 30.3.2008 Репутация: нет Всего: нет |
Ссылка на оригинал
http://social.msdn.microsoft.com/Forums/en...73-9022034c6722 Повторюсь:нужно всего лишь привязать свойство к элементу?На мсдн форуме посоветовали то,что вы видите выше...В книгах я такого не встречал,везде привязывалось "напрямую".Кому верить?Чтоб привязать нужно свойство регистрировать целое? |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
fromrus, с DependencyProperty точно заработает...
но в конце топика там посоветовали присовить объект содержащий свойство Chairs в качестве DataContext текстблоку -------------------- СУВ, Partizan. |
|||
|
||||
| fromrus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 30.3.2008 Репутация: нет Всего: нет |
попробовал присвоить DataContеxt Textblock'a "this",а потом и "Window1" -не работает даж в случае Dep prop...
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 9 Всего: 67 |
fromrus, ElementName пробовали установить?
-------------------- СУВ, Partizan. |
|||
|
||||
| rooks |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 28.9.2008 Где: Минск Репутация: 5 Всего: 9 |
если класс не статический, то Binding нужно писать в коде а не в xaml-е |
|||
|
||||
| Idsa |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 2 Всего: 62 |
fromrus, правильно ли я понял, что Вам нужно привязать к элементу свойство из codebehind этого же класса? С такой задачей я как раз столкнулся вчера и, подумав, реализовал следующим образом:
Работает так: добираемся по дереву до окна и считываем/записываем его свойство FillBrush (которое должно быть public). Работает, но не так, как хотелось бы. Во-первых, весь этот огород с RelativeSource - не самое красивое и производительное решение. Во-вторых, без реализации интерфейса INotifyPropertyChanged в классе формы (а реализовывать этот интерфейс в классе формы, на мой взгляд, неправильно) как такового TwoWay режима не получится: Binding движок не узнает о том, что Вы в коде изменили значение переменной. Поэтому при каждом изменении переменной в коде необходимо ручками вызывать UpdateSource... так что баиндинг теряет смысл. Взглянув на это безобразие, решил перенести свойства из формы в отдельный статический класс настроек (который к тому же реализовывал бы INotifyPropertyChanged). Однако, и с реализацией этой идеи меня ждал неприятный сюрприз (карма у меня такая
С модификатором TwoWay данный вариант не прокатит. Binding из Source в Target очевиден: свойству Text присваем ссылку, которую получаем из Source. Однако в обратном направлении баиндинг невозможен: какому свойству Source присвоить новое значение указывается через свойство Path, которое в этом случае не задается. Поэтому такой вариант возможен только для OneWay привязки. На workaround меня натолкнул этот блогпост: http://pavanpodila.spaces.live.com/blog/cn...59398!301.entry (последний коммент must read). Я реализовал singleton класс, реализующий интерфейс INotifyChanged. Singleton в этом случае нужен для эмуляции статического класса.
Теперь я могу баиндить настройки вот таким элегантным (и более производительным, чем через RelativeSource) способом:
Добавлено @ 14:57 Забыл добавить, что, действительно, можно реализовать данный функционал через DependencyProperties. Это, как минимум, избавит программиста от необходимости реализации интерфейса INotifyPropertyChanged. Это сообщение отредактировал(а) Idsa - 18.10.2008, 15:23 |
||||||||
|
|||||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |