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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Dependency property registration 
:(
    Опции темы
Idsa
Дата 3.7.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



При регистрации Dependency Property передается аргумент ownerType.
В случае регистрации Attached Property смысл этого свойства очевиден: какие классы могут аттачить это свойство.
В случае регистрации "обычного" Dependency Property смысл этого свойства мне не ясен: какой может быть ownerType кроме this?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
PashaPash
Дата 4.7.2008, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Idsa, вот типичное DependencyProperty:
Код
public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass));
Куда тут вписывать this?


--------------------
PM MAIL WWW   Вверх
Idsa
Дата 4.7.2008, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



Цитата(PashaPash @  4.7.2008,  04:34 Найти цитируемый пост)
Куда тут вписывать this? 

вместо ownerType


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
PashaPash
Дата 4.7.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Idsa @  4.7.2008,  07:09 Найти цитируемый пост)
вместо ownerType 

Это статическое свойство. Инициализация - часть статического конструктора. this - ссылки на экземпляр - в нем нет. Конструкции "класс в котором находится данный кусок кода" в C# тоже нет. Вводить ее собираются, да и смысла заменять явное упоминание типа на какой-то thistype особо нет.


--------------------
PM MAIL WWW   Вверх
Idsa
Дата 4.7.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



Цитата(PashaPash @  4.7.2008,  14:34 Найти цитируемый пост)
Это статическое свойство. Инициализация - часть статического конструктора. this - ссылки на экземпляр - в нем нет. Конструкции "класс в котором находится данный кусок кода" в C# тоже нет. Вводить ее собираются, да и смысла заменять явное упоминание типа на какой-то thistype особо нет. 

Я понимаю, что для статического методе this не определен.
Вопрос заключается в том, какого предназначение ownerType при регистрации DependencyProperty.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
HalkaR
Дата 4.7.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

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



Idsa, видимо это просто сделано чтоб не мучаться с определением принадлежности через рефлекшен.
PM MAIL   Вверх
Idsa
Дата 4.7.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



Но зачем вообще DependencyProperty знать, в объекте какого типа оно находится.
Более того, я могу указать любой класс в качестве owner:
Код

public partial class Window1 : Window
    {
        public Window1()
        {
            DependencyProperty property = DependencyProperty.Register("Name", typeof(string), typeof(MyClass));

            InitializeComponent();
        }
    }

    public class MyClass
    {}

, но exception не вылетает.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
PashaPash
Дата 4.7.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Idsa, А почему он должен вылетать? Все вполне корректно, ты просто уведомляешь систему DP о том, что у класса MyClass есть свойство Name. Какая разница, где ты это делаешь - в статическом конструкторе, или в конструкторе Window1.


--------------------
PM MAIL WWW   Вверх
Idsa
Дата 4.7.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



Хм... Если это понимать таким образом, то опять возникает несколько спорных моментов.
1. Что за нужда регистрировать свойства одного класса из другого?
2. Почему не вылетает ехception аля "Тип MyClass не наследуется от DependencyObject"?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Idsa
Дата 9.7.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



Судя по всему, ownerType нужен для того, чтобы использовать то же dependency property в других классах. Вот пример с MSDN: http://msdn.microsoft.com/en-us/library/ms754002.aspx.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
PashaPash
Дата 9.7.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Да, только это не отвечает на вопрос #2.


--------------------
PM MAIL WWW   Вверх
Idsa
Дата 15.7.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



Вот обсуждение этого же вопроса на форуме MSDN: http://forums.msdn.microsoft.com/en-US/wpf...94-7527a2210198
К сожалению, на последний мой пост там так и не ответили... но не суть.

Цитата(PashaPash @  9.7.2008,  18:30 Найти цитируемый пост)
Да, только это не отвечает на вопрос #2. 

Как я выяснил, Exception кидается только в том случае, когда dependency property регистрируется с указанием метаданных. Чем вызвана такое поведение - без понятия.

В целом же, ownerType разрешено прописывать ручками, т. к. это позволяет указать любой базовый тип для множества объектов. Тогда поведение dependency property становится очень похожим на attached dependency property (за исключением того, что такие attached properties не получится использовать в xaml).

Это сообщение отредактировал(а) Idsa - 15.7.2008, 12:12


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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