Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> wpftoolkit.PropertyGrid не показывает свойства, свойства классов-предков 
V
    Опции темы
ne_tru_e
  Дата 13.3.2014, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Приношу жертвы MS
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 20.1.2008

Репутация: нет
Всего: 4



Использую PropertyGrid из WPFToolkit 1.9.0. Какое-то время всё было хорошо, он успешно показывал все свойства переданных ему объектов, а также свойства предков этих объектов (т.е. тех, от кого классы этих объектов наследованы). Через какое-то время начали переделывать классы, и видимо где-то что-то не так сделали, т.к. PropertyGrid перестал показывать свойства предков, хотя для одного класса он их успешно показывает, и это странно. Свойство AutoGenerateProperties установлено в True. Пробовали версию WPFToolkit 2.0.0, потом 2.1.0, никакого эффекта. Что можно сделать, чтобы показывать все свойства?
PM WWW Jabber   Вверх
ne_tru_e
Дата 15.3.2014, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Приношу жертвы MS
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 20.1.2008

Репутация: нет
Всего: 4



Нашёл временное решение, хоть оно и медленно работает (почти 2 секунды). Суть в том, что мы создаём определения свойств до того, как присвоить объект свойству SelectedObject. При этом AutoGenerateProperties=false.
Код

// pg это экземпляр PropertyGrid
pg.PropertyDefinitions.Clear();
var ps = (NewItem).GetType();
PropertyInfo[] props = ps.GetProperties();

foreach (PropertyInfo prop in props)
{
    bool displayThisProperty = true;
    var attrs = prop.GetCustomAttributes(false);

    // если атрибуты имеются, проверяем, есть ли Browseable и чему он равен.
    if (attrs.Length > 0)
    {
        foreach (object attr in attrs)
        {
            var a = attr as BrowsableAttribute;
            if (a != null)
            {
                if (!a.Browsable)
                    displayThisProperty = false;
            }
        }
    }

    if (displayThisProperty)
        pg.PropertyDefinitions.Insert(0,
            new Xceed.Wpf.Toolkit.PropertyGrid.PropertyDefinition() {Name = prop.Name});
}

pg.SelectedObject = NewItem;

Все свойства отображаются.
Очевидно что в самом PropertyGrid есть баг. Т.к. компонент открытый, я изучаю его исходники.
P.S. Странно, нажимаю "Предварительный просмотр", потом закрываю появившееся окно, затем уже нажимаю "Отправить" и ничего не происходит. Это баг форума?
PM WWW Jabber   Вверх
ne_tru_e
Дата 16.3.2014, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Приношу жертвы MS
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 20.1.2008

Репутация: нет
Всего: 4



Итак, я разобрался полностью. Никакого бага в PropertyGrid, связанного со свойствами классов-предков нет, просто на одном свойстве класса он тихонько прервал цикл по всем свойствам и вывел текст exception'a в окно вывода, но туда я посмотреть тогда не догадался. Исключение происходило из-за того, что тип свойства не поддерживал TwoWay-биндинг. Тут 2 варианта решения проблемы: выставить свойству атрибут [Browsable(false)], либо переписать свойство так, чтобы привязка не приводила к ошибке.
PM WWW Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0968 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.