Доступ к «текущему классу» из пользовательского WPF MarkupExtension - PullRequest
7 голосов
/ 15 июня 2010

Я пытаюсь написать пользовательский MarkupExtension, чтобы облегчить мою жизнь, предоставив мне лучший способ указать привязки в XAML. Однако я хотел бы знать, есть ли какой-нибудь способ получить доступ к объекту, который представляет файл, в котором используется MarkupExtension.

Другими словами, предположим, что у меня есть UserControl, который определяет конкретное представление модели данных моей программы. Этот элемент управления имеет множество визуальных элементов, таких как сетки, границы и общий макет. Если я использую свой MarkupExtension для определенного свойства некоторого элемента в этом UserControl, я хочу получить доступ к экземпляру UserControl, не зная, какой это тип (я планирую использовать отражение).

Это вообще возможно?

1 Ответ

13 голосов
/ 15 июня 2010

В .NET 4.0 добавлена ​​возможность IRootObjectProvider , но, к сожалению, в предыдущих версиях это было невозможно. Если вы используете .NET 4.0, вы можете сделать следующее:

public override object ProvideValue(IServiceProvider serviceProvider)
{
    var rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
    var root = rootObjectProvider.RootObject;
    // do whatever you need to do here
}
...