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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DependencyProperty. Как вернуть обратно зависимост, DependencyProperty 
:(
    Опции темы
Compositum
  Дата 20.7.2009, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Имеется некий тестовый класс:

Код

public class MyMainClass : ContentControl
    {
        Color _color;
        public static readonly DependencyProperty ColorProperty;
        public Color Color
        {
            get { return (Color)GetValue(ColorProperty); }
            set { SetValue(ColorProperty, value); }
        }
...  
    }

Очередной фрагмент:
Код


        [STAThread]
        static void Main(string[] args)
        {
            MyMainClass cl = new MyMainClass();                        
            MyMainClass cl2 = new MyMainClass();
            cl.Content = cl2;
...//Тут изменяю интересующее меня свойство и смотрю результаты.
}


Всё работает как нужно - при изменении свойства родительского объекта, вложенный объект так же меняет своё свойство, и делает это до тех пор, пока ему не будет назначено значение индивидуально. Т.е. с этим порядок. Но... Предположим, что изменив свойство дочернего элемента я решу вернуть обратно его привязку к свойству родительского. Как тогда быть?
Пытался реализовать это путем возвращения значения по умолчанию:

Код

cl2.Color = (Color)MyMainClass.ColorProperty.DefaultMetadata.DefaultValue;


А так же приравниванием свойства дочернего свойству родительского:
Код


cl2.Color = cl.Color;


Однако не срабатывает ни тот ни др. способ.

Как это решается?
PM   Вверх
Partizan
Дата 20.7.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Compositum, решается либо созданием Binding-а, либо использованием AttachedProperty.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Compositum
Дата 20.7.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Цитата(Partizan @ 20.7.2009,  10:29)
Compositum, решается либо созданием Binding-а, либо использованием AttachedProperty.

биндинг-биндингом. интересно применительно именно к DependencyProperty. т.е. я так понял, что единожды изменив свойство дочернего, вернуть его подчинение родительскому уже никак?
PM   Вверх
Partizan
Дата 20.7.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Compositum, я ж написал про AttachedProperty


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Compositum
Дата 20.7.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Цитата(Partizan @ 20.7.2009,  10:54)
Compositum, я ж написал про AttachedProperty

насколько я понял из прочитанного у Петцольда ( WPF стр 164)., AttachedProperty - это те же самые DependencyProperty, только они регистрируются иначе (DependencyProperty.RegisterAttached). Само по себе присоединенное свойство (AttachedProperty) предназначено для того (как я опять же понимаю), чтобы класс, реализующий данное свойство не был обязан быть производным от DependencyObject. А во всем остальном ведет себя как обычный DependencyProperty. А если так, то как мне сие поможет в решении моего вопроса?
PM   Вверх
Partizan
Дата 20.7.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Compositum, скажу сразу - книжка Петцольда получилась, мягко говоря, "так себе"...

Цитата

Само по себе присоединенное свойство (AttachedProperty) предназначено для того (как я опять же понимаю), чтобы класс, реализующий данное свойство не был обязан быть производным от DependencyObject. А во всем остальном ведет себя как обычный DependencyProperty.


Не совсем так...Attached Properties нужны прежде всего для более качественного управления наследованием свойств(Property Inheritance).

Вообще говоря, в вашем случае Attached Properties и не нужны...достаточно простого вызова ClearValue у объекта cl2


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Compositum
Дата 20.7.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Цитата(Partizan @ 20.7.2009,  14:11)
Compositum, скажу сразу - книжка Петцольда получилась, мягко говоря, "так себе"...

Цитата

Само по себе присоединенное свойство (AttachedProperty) предназначено для того (как я опять же понимаю), чтобы класс, реализующий данное свойство не был обязан быть производным от DependencyObject. А во всем остальном ведет себя как обычный DependencyProperty.


Не совсем так...Attached Properties нужны прежде всего для более качественного управления наследованием свойств(Property Inheritance).

Вообще говоря, в вашем случае Attached Properties и не нужны...достаточно простого вызова ClearValue у объекта cl2

ClearValue говорите... хм. сейчас не могу проверить, вечером дома попробую.
Спасибо!

А насчет книги Петцольда - конечно не все раскрыто так, как того бы хотелось, но все же в сравнении с Мак-Дональдом те же DependencyProperty у Петцольда изложены гораздо понятней на мой взгляд. После Петцольда Мак-Дональд читается гораздо легче (некоторые места, которые не понял у Мак-Дональда, смог понять у Петцольда).
Вообще Петцольд хорошие книжки пишет, разжеванные (взять тот же "Код").
PM   Вверх
Partizan
Дата 20.7.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Compositum, я читал WPF Unleashed Адама Натана, чего и всем уже не в первый раз тут советую smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Compositum
Дата 20.7.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Цитата(Partizan @ 20.7.2009,  16:16)
Compositum, я читал WPF Unleashed Адама Натана, чего и всем уже не в первый раз тут советую smile

в электронном виде, да еще и на английском.... =))))) это сложно =))))
PM   Вверх
SamMan
Дата 20.7.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 16.7.2009

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



Цитата

но все же в сравнении с Мак-Дональдом те же DependencyProperty у Петцольда изложены гораздо понятней на мой взгляд


Спорно, молодой человек, спорно...

Цитата

Дональд читается гораздо легче (некоторые места, которые не понял у Мак-Дональда, смог понять у Петцольда)


ВОТ, гораздо ближе к истине - в том то и дело что обе монографии дополняют друг-друга. Совершенно определенно прочитав одно нужно(а не можно) браться за второе. Что в какую очередь не скажу и даже не посоветую, очень субъективно. Мое скромнейшее ИМХО - Дональд производит впечатление более "основательного" труда, хотя Петцольд местами "копает" много глубже.

Цитата

читал WPF Unleashed Адама Натана, чего и всем уже не в первый раз тут советую


Тоже отлично, но и пере-идеализировать ее не стоит. Например, в Unleashed, стр. 257, пример "правильного" юзания ресурсов системы:

Код

<Button Background=“{DynamicResource {x:Static SystemColors.WindowBrush}}”/>

что не верно уже по определению. DynamicResource ожидает на входе КЛЮЧ ресурсного словаря, вместо этого ему пытаются впихнуть ЗНАЧЕНИЕ. Так мало того, что не приведен правильный XAML:
Код

<Button Background=“{DynamicResource {x:Static SystemColors.WindowBrushKey}}”/>
 
так еще ничего нет о том, что все классы SystemXXX предлагают доп. статич. св-ва возвращающие не сами системные объекты(цветы, фонты, ....) а КЛЮЧИ к ним. А вы говорите "лучшая книга"...
PM MAIL   Вверх
Partizan
Дата 20.7.2009, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



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


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Compositum
Дата 20.7.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Да, ClearValue именно то, что нужно. Спасибо!
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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