Страницы

Поиск по вопросам

суббота, 1 июня 2019 г.

Как использовать индексаторы в xaml без квадратных скобок?

Есть некий generic класс
public class GenericClass { public object this[string s] { return s; } }
Ну и экземпляр класса используется как DataContext. Тогда для вызова из xaml будет такая разметка

и вернет она текст "qwer".
Вопрос, а можно ли какими либо ухищрениями избавиться от квадратных скобок? Вот есть класс DataView, как там это реализовано?


Ответ

Нашел решение. Класс public class GenericClass должен наследовать интерфейс ICustomTypeDescriptor и индексатор в нем вообще не нужен. Тогда Мне нужно из конструктора просто подбирать передаваемый объект типа Т и использовать его как ресурс для реализации интерфейса.

Я не выложу дословный код, потому что не имею его под рукой. Могу лишь из памяти набросать его основу
Класс:
public class ViewModel: ICustomTypeDescriptor { T _source;
public ViewModel(T obj) { _source = obj; }
// далее идет реализация интерфейса. Все методы сделаны идентично, я приведу пример одного public AttributeCollection GetAttributes() { return TypeDescriptor.GetAttributes(_source); } }
Класс еще не готов. Нужно еще наследовать INotifyPropertyChanged и предусмотреть мониторинг свойств модели или иные способы изменения свойств из кода. Но это совсем другая история )

Комментариев нет:

Отправить комментарий