Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM - DataGrid - динамическое кол-во столбцов / 25 сообщений из 26, страница 1 из 2
30.05.2011, 13:26
    #37285304
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
собсна имеется некий класс, реализующий ICustomTypeDescriptor,
кол-во свойств (полей, называейт как хотите) может быть разным.
коллекция этих объектов является источником для грида, значения свойств (полей) хотелось бы видеть в столбцах (Columns) DataGrid.
вопрос в чем - как бы это покрасивше уложить это дело в MVVM паттерн, как-то у меня не получилось :(
но я в MVVM новичок, пока только эксперементирую.
Спасибо.
...
Рейтинг: 0 / 0
30.05.2011, 18:28
    #37286070
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
winsky!собсна имеется некий класс, реализующий ICustomTypeDescriptor,
кол-во свойств (полей, называейт как хотите) может быть разным.
коллекция этих объектов является источником для грида, значения свойств (полей) хотелось бы видеть в столбцах (Columns) DataGrid.
вопрос в чем - как бы это покрасивше уложить это дело в MVVM паттерн, как-то у меня не получилось :(
но я в MVVM новичок, пока только эксперементирую.
Спасибо.1. Сделать генерацию колонок грида прямо в классе морды (UserControl, Window и т. п.). Вынести этот код в стратегию и вызывать из Loaded event или откуда удобнее.
2. Сделать присоединяемое свойство.
3. Сделать attached behavior на базе библиотеки System.Windows.Interactivity (Expresion Blend SDK).
4. Унаследовать контрол от DataGrid, и реализовать там.

Другими словами, каким-либо доступным способом поместить этот код в морду. Это чисто её задача.
...
Рейтинг: 0 / 0
31.05.2011, 07:04
    #37286538
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
winsky!,

Если проблема в биндинге к объекту с произвольным количеством свойств, то http://forums.silverlight.net/forums/p/95440/218611.aspx#7.2_H
...
Рейтинг: 0 / 0
31.05.2011, 07:33
    #37286544
i
i
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
enigmaticwinsky!,

Если проблема в биндинге к объекту с произвольным количеством свойств, то http://forums.silverlight.net/forums/p/95440/218611.aspx#7.2_H

Эта ссылка для SL2. C четвертой версии, где появился DynamicObject, нет никаких проблем
...
Рейтинг: 0 / 0
31.05.2011, 10:55
    #37286742
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
i,

Окей, разные варианты это хорошо.
Плохо то, что http://connect.microsoft.com/VisualStudio/feedback/details/522119/databinding-to-dynamic-objects-is-broken
Кстати, генерация типов в рантайме в числе "работ вокруг".
...
Рейтинг: 0 / 0
31.05.2011, 11:00
    #37286751
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
Алексей К,

Алексей К1. Сделать генерацию колонок грида прямо в классе морды (UserControl, Window и т. п.). Вынести этот код в стратегию и вызывать из Loaded event или откуда удобнее
так и делал, но не прет, хочется чтобы "оно само" :)

хочется что-то вроде такого (псевдокод):
Код: plaintext
1.
2.
3.
4.
<DataGrid >
            <DataGrid.Columns>
                <Binding></Binding>
            </DataGrid.Columns>
 </DataGrid> 
и в зависисомости от типа свойства привязанного к колонке - свой тип колонки, а-ля DataTemplate только для DataGridColumn.
над остальными предложенными вами способами подумаю,
в любом случае, спасибо за ответ :)
...
Рейтинг: 0 / 0
31.05.2011, 11:08
    #37286767
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
enigmatic,

enigmaticКстати, генерация типов в рантайме в числе "работ вокруг".
не понял мысль.
кстати я не говорил о генерации именно типов в рантайме, у меня генерируются только св-ва с весьма опрделенными типами.
...
Рейтинг: 0 / 0
31.05.2011, 12:49
    #37287034
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
winsky!,

А что на счет AutoGenerateColumns = true?
...
Рейтинг: 0 / 0
31.05.2011, 13:07
    #37287081
enigmatic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
winsky!,

То есть генерация класса бизнес-объекта, который есть набор свойств, а к каждому свойству мы привязываем столбец грида.
...
Рейтинг: 0 / 0
31.05.2011, 13:24
    #37287131
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
enigmatici,

Окей, разные варианты это хорошо.
Плохо то, что http://connect.microsoft.com/VisualStudio/feedback/details/522119/databinding-to-dynamic-objects-is-broken
Кстати, генерация типов в рантайме в числе "работ вокруг".

C DynamicObject точнее было бы сказать, что не работает как в WPF. C этим можно было бороться с помощью конвертеров или
индексных свойств. Но с ICustomTypeDescriptor в пятой версии теперь дела обстоят даже лучше, чем в WPF, тк после добавления
свойств известны их типы при binding'е. Сейчас гоняю тесты, пока все ок(в частности, после добавления свойств к объекту, автогенерация в datagrid'е проходит отлично).

Красота! Гибкость членов необыкновенная!!!!

ЗЫ По теме. Можно еще задавать свои аттрибуты свойствам и поним генерить нужные столбцы
...
Рейтинг: 0 / 0
31.05.2011, 14:03
    #37287238
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
Руки-крюкиwinsky!,

А что на счет AutoGenerateColumns = true?
есть возможность сгенерировать колонки не для всех свойств? по-моему - нет.
...
Рейтинг: 0 / 0
31.05.2011, 14:06
    #37287242
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
enigmaticwinsky!,

То есть генерация класса бизнес-объекта, который есть набор свойств, а к каждому свойству мы привязываем столбец грида.
так у меня проблема не в создании/генерации класса бизнес-объекта, а в его отображении в виде строки в гриде, вернее даже сказать - как это уложить в паттерн MVVM - вопрос носит где-то даже теоретический характер, но если решение будет - можно применить и на практике :)
...
Рейтинг: 0 / 0
31.05.2011, 14:09
    #37287250
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
SeVaЗЫ По теме. Можно еще задавать свои аттрибуты свойствам и поним генерить нужные столбцы
я вас очень прошу высказываться в этом топике исключительно по теме (воспринимать именно как просьбу).
генерить столбцы - самое простое и очевидное решение, собственно в одном из проектов его и использовал, но мне оно не нравится, даже не могу сформулировать чем, как только смогу - скажу :)
...
Рейтинг: 0 / 0
31.05.2011, 15:09
    #37287429
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
winsky!Алексей К1. Сделать генерацию колонок грида прямо в классе морды (UserControl, Window и т. п.). Вынести этот код в стратегию и вызывать из Loaded event или откуда удобнее
так и делал, но не прет, хочется чтобы "оно само" :)
А в любом случае где-то придётся подписываться на событие. В случае с attached property/behavior или MyDataGrid подписка на событие выносится из прикладного кода, что наверное хорошо. В случае с attached property ещё появляется возможность присваивать его через стиль, что может быть весьма полезно.
winsky!хочется что-то вроде такого (псевдокод):
Код: plaintext
1.
2.
3.
4.
<DataGrid >
            <DataGrid.Columns>
                <Binding></Binding>
            </DataGrid.Columns>
 </DataGrid> 
и в зависисомости от типа свойства привязанного к колонке - свой тип колонки, а-ля DataTemplate только для DataGridColumn.
над остальными предложенными вами способами подумаю,
в любом случае, спасибо за ответ :)
В случае с attached property это может выглядеть как-то так:
Код: plaintext
<DataGrid my:DataGridBehaviors.IsColumnsGeneratedFromListMetadata="True"/>
А уже там можно подписаться на ItemsSourceChanged/Loaded, и используя ITypedList извлечь метаданные, и сгенерировать колонки.

Через interaction может быть как-то так. Но принцип тот же.
Код: plaintext
1.
2.
3.
4.
<DataGrid>
    <i:Interaction.Behaviors>
        <my:DataGridColumnsGeneratorFromMetadataBehavior/>
    </i:Interaction.Behaviors>
</DataGrid>
...
Рейтинг: 0 / 0
31.05.2011, 15:12
    #37287440
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
ЗЫ: Я бы "по старинке" унаследовал контрол от датагрида и сделал там. Предполагаю, что вероятность использования этой фичи с разными типами DataGrid-ов не высока.
...
Рейтинг: 0 / 0
31.05.2011, 15:22
    #37287469
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
Алексей КЗЫ: Я бы "по старинке" унаследовал контрол от датагрида и сделал там. Предполагаю, что вероятность использования этой фичи с разными типами DataGrid-ов не высока.
не в моем случае :) хотя, используя этот подход можно тоже добиться достаточной гибкости.
...
Рейтинг: 0 / 0
31.05.2011, 15:50
    #37287574
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
winsky!Руки-крюкиwinsky!,

А что на счет AutoGenerateColumns = true?
есть возможность сгенерировать колонки не для всех свойств? по-моему - нет.

Я уверен есть атрибут, который заставляет грид игнорировать свойство.
...
Рейтинг: 0 / 0
31.05.2011, 16:15
    #37287647
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
winsky!SeVaЗЫ По теме. Можно еще задавать свои аттрибуты свойствам и поним генерить нужные столбцы
я вас очень прошу высказываться в этом топике исключительно по теме (воспринимать именно как просьбу).
генерить столбцы - самое простое и очевидное решение, собственно в одном из проектов его и использовал, но мне оно не нравится, даже не могу сформулировать чем, как только смогу - скажу :)

Если тебе не нравится генерация столбцов и есть ICustomTypeProvider, то не морочь нам голову, пусть он возвращает тип с набором только тех свойств, которые нужно отображать в гриде
...
Рейтинг: 0 / 0
31.05.2011, 17:03
    #37287830
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
SeVa,

Если Вы так бережете свою голову - просто не читайте этот топик.
Заранее спасибо.
...
Рейтинг: 0 / 0
31.05.2011, 19:08
    #37288063
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
Руки-крюкиwinsky!пропущено...

есть возможность сгенерировать колонки не для всех свойств? по-моему - нет.

Я уверен есть атрибут, который заставляет грид игнорировать свойство.
атрибута не нашел, но есть события AutoGeneratingColumn & AutoGeneratedColumns
можно конечно как-то вот так:
Код: plaintext
1.
2.
3.
4.
 void myGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            if(someCondition)
                 e.Cancel = true;
        }
...
Рейтинг: 0 / 0
31.05.2011, 19:24
    #37288087
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
winsky!атрибута не нашелМожет [Browsable(False)] ?

Или что-то из System.ComponentModel.DataAnnotations namespace ?
...
Рейтинг: 0 / 0
31.05.2011, 19:41
    #37288110
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
Posted by Microsoft on 23.04.2009 at 13:34Hi Moondaddy! In Visual Studio 2010 the browsable attribute will work for WPF.
Интересно, автор сдержал своё обещание? :-)
...
Рейтинг: 0 / 0
05.06.2011, 18:50
    #37295645
i
i
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
Руки-крюкиЯ уверен есть атрибут, который заставляет грид игнорировать свойство.
Очередной бред. Тут всё есть http://wpf.codeplex.com/
...
Рейтинг: 0 / 0
06.06.2011, 11:48
    #37296519
winsky!
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
iРуки-крюкиЯ уверен есть атрибут, который заставляет грид игнорировать свойство.
Очередной бред. Тут всё есть http://wpf.codeplex.com/
будьте добры ткнуть меня носом, где там это все?
...
Рейтинг: 0 / 0
06.02.2012, 12:47
    #37648468
Sergio Kornelius
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVVM - DataGrid - динамическое кол-во столбцов
public class TestItem
{
[DisplayName("Display Name 1")]
public int Value1 { get; set; }

[DisplayName("Display Name 2")]
public int Value2 { get; set; }

[DisplayName("Display Name 3")]
public int Value3 { get; set; }
}

http://code.cheesydesign.com/?p=701
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / MVVM - DataGrid - динамическое кол-во столбцов / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]