Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Dependency property registration


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

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

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

вместо ownerType

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

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

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

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

Автор: HalkaR 4.7.2008, 11:17
Idsa, видимо это просто сделано чтоб не мучаться с определением принадлежности через рефлекшен.

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

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

            InitializeComponent();
        }
    }

    public class MyClass
    {}

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

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

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

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

Автор: PashaPash 9.7.2008, 14:30
Да, только это не отвечает на вопрос #2.

Автор: Idsa 15.7.2008, 12:11
Вот обсуждение этого же вопроса на форуме MSDN: http://forums.msdn.microsoft.com/en-US/wpf/thread/ef1b9788-1194-4786-8394-7527a2210198
К сожалению, на последний мой пост там так и не ответили... но не суть.

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

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)