Могу ли я получить доступ к ItemsHost ItemsControl, используя отражение? - PullRequest
4 голосов
/ 20 февраля 2011

Я создаю пользовательский ItemsControl, полученный из DataGrid.Мне нужно получить доступ к ItemsHost, который является Panel, который на самом деле содержит строки DataGrid.Я видел некоторые уродливые уловки, чтобы сделать это, но я считаю их хуже, чем использование отражения.Так я могу получить доступ к ItemsHost с помощью отражения?И как?

1 Ответ

5 голосов
/ 21 февраля 2011

Да, я могу. Это просто - я только что создал свойство в классе, наследуемое от DataGrid:

protected Panel ItemsHost {
    get {
        return (Panel) typeof (MultiSelector).InvokeMember("ItemsHost",
            BindingFlags.NonPublic | BindingFlags.GetProperty | BindingFlags.Instance,
            null, this, null);
    }
}

Работает как шарм :). Я могу получить значение ItemsHost внутреннего свойства класса ItemsControl. Таким образом, я могу получить доступ к любым незащищенным свойствам.

...