2009-11-18 2 views
2

Это следующий вопрос из более ранней публикации (here).Динамическое связывание столбцов в Xaml

У меня есть информация о «заголовке», которая хранится как: Dictionary<string,string> - где первая строка представляет имя поля, а вторая заголовок, который я хочу отобразить.

У меня есть набор динамических данных, который хранится как: Dictionary<string, object> - где строка - это имя поля.

я связываю с этим в XAML как:

<data:DataGrid Name="_dataGrid" AutoGenerateColumns="True" IsReadOnly="False" Margin="5" Height="200"> 
      <data:DataGrid.Columns> 
       <data:DataGridTextColumn Header="Forename" CanUserSort="True" SortMemberPath="Forename" 
              Binding="{Binding Converter={StaticResource RowIndexConverter}, 
              ConverterParameter=Forename}"/> 
       <data:DataGridTextColumn Header="Surname" CanUserSort="True" SortMemberPath="Surname" 
             Binding="{Binding Converter={StaticResource RowIndexConverter}, 
              ConverterParameter=Surname}"/> 
       <data:DataGridTextColumn Header="Age" CanUserSort="True" SortMemberPath="Age" 
             Binding="{Binding Converter={StaticResource RowIndexConverter}, 
              ConverterParameter=Age}"/> 
       <data:DataGridTextColumn Header="Shoesize" CanUserSort="True" SortMemberPath="Shoesize" 
             Binding="{Binding Converter={StaticResource RowIndexConverter}, 
              ConverterParameter=Shoesize}"/>     
      </data:DataGrid.Columns> 
     </data:DataGrid> 

Задача 1 Я хочу автоматическую генерацию этих столбцов (с использованием информации заголовка входит в комплект)

Задача 2 Я хочу столбцы быть (например, boolean = checkbox)

Задача 3 Идеально я wou ld также хотите указать погоду, кнопка должна существовать в первом столбце или нет (т. кнопка редактирования/просмотра) с помощью привязки данных

ответ

2

Я использовал подход, который следует за образец этого псевдокода

columns = New DynamicTypeColumnList() 
columns.Add(New DynamicTypeColumn("Name", GetType(String))) 
dynamicType = DynamicTypeHelper.GetDynamicType(columns) 

DynamicTypeHelper.GetDynamicType() генерирует тип с простыми свойствами. См this post для деталей о том, как создать такой тип

Тогда на самом деле использовать тип, сделать что-то вроде этого

Dim rows as List(Of DynamicItem) 
Dim row As DynamicItem = CType(Activator.CreateInstance(dynamicType), DynamicItem) 
row("Name") = "Foo" 
rows.Add(row) 
dataGrid.DataContext = rows 
+0

ясно, что есть много деталей осталось из этого объяснения, но он должен установить вас на правильном пути. – kenwarner

+0

Ах, да, я раньше изучал метод Владимира Бодурова. И это действительно здорово. Однако моя проблема заключается в том, что генерация динамического типа означает, что вы не можете использовать сильную печать во время разработки (а отладка во время выполнения возвращает null). Колин имеет хорошую должность здесь: http://www.scottlogic.co.uk/blog/colin/2009/04/binding-a-silverlight-datagrid-to-dynamic-data-via-idictionary/comment-page- 1/# comment-5535 Это объясняет более «стандартный» способ делать вещи. Это требует некоторой настройки при использовании с различными элементами управления, но код C# - очень изящное решение. –

Смежные вопросы