Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Биндинг коллекции коллекций к WPF DataGrid / 10 сообщений из 10, страница 1 из 1
05.11.2008, 15:07
    #35635244
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Биндинг коллекции коллекций к WPF DataGrid
Как я понял, WPF DataGrid в качестве ItemsSource использует IEnumerable<T> или ObservableCollection<T>. Но если элемент моей коллекции является коллекцией - мне нужно развернуть его элементы в строку. В WinForms можно было реализовать ITypedList и скормить оттуда пропертидескрипторы в DataGridView - а как аналогичная задача решается в WPF DataGrid?
...
Рейтинг: 0 / 0
06.11.2008, 01:37
    #35636353
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Биндинг коллекции коллекций к WPF DataGrid
А где в WPF DataGrid?
У мене нету :(
Или от сторонних производителей?

По теме же - можете использовать для контролов - наследников ItemsControl любую коллекцию, реализующую IEnumerable.
...
Рейтинг: 0 / 0
06.11.2008, 02:06
    #35636365
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Биндинг коллекции коллекций к WPF DataGrid
SQL_LamerА где в WPF DataGrid?
У мене нету :(
Или от сторонних производителей?

По теме же - можете использовать для контролов - наследников ItemsControl любую коллекцию, реализующую IEnumerable.

Надо наверное уточнить.
А то я как - то загадочно выразился.
С одной стороны - мне о существовании DataGrid в WPF ничего неизвестно,
с другой - пишу "по теме"

Имеются в виду контролы, к которым можно биндить коллекции - а именно: ListBox, ComboBox, ListView, Menu, TreeView.
...
Рейтинг: 0 / 0
06.11.2008, 09:00
    #35636527
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Биндинг коллекции коллекций к WPF DataGrid
SQL_LamerА где в WPF DataGrid?
У мене нету :(


Уже есть.
Контрол пока доступен в виде отдельной заплатки к 3.1SP1.

SQL_Lamer
По теме же - можете использовать для контролов - наследников ItemsControl любую коллекцию, реализующую IEnumerable.

Эхехе, а если коллекция пустая - как DataGrid сможет получить инфу о столбцах?

Документации пока ноль... читаю от SilverLight, вроде это такой же грид как там...
но мне ж как всегда поизвращаться хочется... хочу вставить туды комбобокс чтоб он мог менять содержимое своего списка в зависимости от данных в строке грида... делаю так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            DataGridTemplateColumn col4 = new DataGridTemplateColumn();
            DataTemplate col4Template = new DataTemplate();
            FrameworkElementFactory cellTemplateFactory = new FrameworkElementFactory(typeof(TextBlock));
            Binding binding = new Binding("LU1");
            cellTemplateFactory.SetBinding(TextBlock.TextProperty, binding);
            col4Template.VisualTree = cellTemplateFactory;
            col4Template.Seal();
            col4.CellTemplate = col4Template;
            col4.Header = "LU1";
            DataTemplate col4EditindTemplate = new DataTemplate();
            FrameworkElementFactory cellEditingTemplateFactory = new FrameworkElementFactory(typeof(MyCombo));
            col4EditindTemplate.VisualTree = cellEditingTemplateFactory;
            col4.CellEditingTemplate = col4EditindTemplate;
            dataGrid1.PreparingCellForEdit += new EventHandler<DataGridPreparingCellForEditEventArgs>(dataGrid1_PreparingCellForEdit);
            dataGrid1.Columns.Add(col4);

И перехватываю PreparingCellForEdit:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
        void dataGrid1_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
        {
            if (e.Column.Header.ToString().Equals("LU1"))
            {
                MyCombo phases = (MyCombo)e.EditingElement;
                Console.WriteLine(phases);
            }
        }

И хрена - хоть в инете и нашел что можно EditingElement кастить к типу генерируемому FrameworkElementFactory - а оно мне говорит "ContentPresenter там, и он не кастится" :(
...
Рейтинг: 0 / 0
06.11.2008, 09:18
    #35636544
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Биндинг коллекции коллекций к WPF DataGrid
авторУже есть.
Контрол пока доступен в виде отдельной заплатки к 3.1SP1.

Поглядим 0_0
...
Рейтинг: 0 / 0
06.11.2008, 10:10
    #35636629
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Биндинг коллекции коллекций к WPF DataGrid
SQL_Lamer
Поглядим 0_0

Пока сделал для экспериментов через попу: можно фабрикой просовывать проперть в контрол. Рисовать депенденсипроперть с похмелья лень - сую в Tag:

Код: plaintext
1.
2.
3.
4.
5.
6.
DataTemplate col4EditindTemplate = new DataTemplate();
FrameworkElementFactory cellEditingTemplateFactory = new FrameworkElementFactory(typeof(MyCombo));
cellEditingTemplateFactory.SetValue(MyCombo.TagProperty, new DateTime());
col4EditindTemplate.VisualTree = cellEditingTemplateFactory;
col4.CellEditingTemplate = col4EditindTemplate;
dataGrid1.PreparingCellForEdit += new EventHandler<DataGridPreparingCellForEditEventArgs>(dataGrid1_PreparingCellForEdit);

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
        internal class MyCombo : ComboBox
        {
            public MyCombo()
            {
                this.DropDownOpened += new EventHandler(MyCombo_DropDownOpened);
            }

            void MyCombo_DropDownOpened(object sender, EventArgs e)
            {
                for (int i = 0; i < 5;i++ )
                {
                    this.Items.Add("Item_" + i + ">>" + this.Tag.ToString());
                }
            }
        }

Ну в общем идея примерно такая. Поскольку через EditingElement до контрола фиг достучишься - придется фабрикой его предподготавлвать (ну засунуть ему в тег колонку к которой он принадлежит, и в ондропе заполнять, благо до строки там достучаться можно). Проктология, да. А что делать... :)

PS: а RowSharing-а у него нету... ну и фиг с ним - я ж не в CellTemplate орудую а в CellEditingTemplate.
...
Рейтинг: 0 / 0
06.11.2008, 10:14
    #35636637
SQL_Lamer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Биндинг коллекции коллекций к WPF DataGrid
А я вообщето не увидел в WPF какой - то необходимости в готовом DataGrid.
При тех возможностях, что там есть...
...
Рейтинг: 0 / 0
06.11.2008, 10:34
    #35636702
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Биндинг коллекции коллекций к WPF DataGrid
А я только что нашел не проктологический способ работы с DataGridTemplateColumn: надо перекрыть GenerateEditingElement и там буянить как заблагорассудится :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        public class DataGridEditableComboBoxColumn : DataGridTemplateColumn //DataGridComboBoxColumn
        {

            public DataGridEditableComboBoxColumn(DataGrid grid)
            {
                //...
            }


            protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem)
            {
                FrameworkElement element = new ComboBox();
                if (element is ComboBox)
                {
                    ComboBox comboBox = (ComboBox)element;
                    comboBox.IsEditable = true;
                    // ... FILL ITEMS HERE
                }
                return element;
            }
        }
...
Рейтинг: 0 / 0
06.11.2008, 13:38
    #35637456
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Биндинг коллекции коллекций к WPF DataGrid
Vladimir Kozlov
Код: plaintext
1.
2.
3.
...
      FrameworkElement element = new ComboBox();
                if (element is ComboBox)
...

Масло масляное?
Не проще ли так:
Код: plaintext
1.
2.
3.
4.
...
ComboBox element = new ComboBox();
// делайте с ним что хотите...
return element;
...
?
...
Рейтинг: 0 / 0
06.11.2008, 15:03
    #35637784
Vladimir Kozlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Биндинг коллекции коллекций к WPF DataGrid
qu-quVladimir Kozlov
Код: plaintext
1.
2.
3.
...
      FrameworkElement element = new ComboBox();
                if (element is ComboBox)
...

Масло масляное?


Э, это в примере откуда я копипастил вместо вызова new ComboBox было base.GenerateEditingElement :) Ну а я в традициях индусов скопипастил и не убрал лишний код ;)
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Биндинг коллекции коллекций к WPF DataGrid / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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