Страницы

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

пятница, 13 марта 2020 г.

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

#c_sharp #net #wpf #xaml


Есть некий generic класс

public class GenericClass
{
    public object this[string s]
    {
        return s;
    }
}


Ну и экземпляр класса используется как DataContext. Тогда для вызова из xaml будет
такая разметка




и вернет она текст "qwer". 

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


Ответы

Ответ 1



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

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

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