2017-10-19 136 views
0

我有一个DataGrid。非常简单:将项目插入列表<string>到DataGrid-Column-Index 2中

<DataGrid Width="320" Height="340" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0" Grid.RowSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Filter" Width="Auto"/> 
      <DataGridTextColumn Header="Name" Width="*"/> 
     </DataGrid.Columns> 
    </DataGrid> 

所以现在我需要在第二列中插入一个字符串列表。 我一直在寻找一个不错的解决方案,但找不到一个好的解决方案。我想过用绑定的方式来做这件事,但不能让它工作来填充第二列。

在第一列中,我想把复选框放在每个字符串Item的前面。

感谢提前:)

+0

你的意思是你想要一行的第二列来保存字符串列表吗? – Redouane

+0

@Redouane是的,列表中有大约70个条目。这些应显示在第二列标题下的行中。 – Niclas

回答

0

您可以手动创建列和第二列中使用DataGridTemplateColumn并提供(即继承它或任何控制),一个ItemsControl作为其DataGridTemplateColumn.CellTemplate这样的:

<DataGrid Margin="4" AutoGenerateColumns="False" ItemsSource="{Binding Models}"> 
     <DataGrid.Columns> 
      <DataGridCheckBoxColumn Header="CheckBox Column Header" Binding="{Binding BindToBooleanPropertyFromModel}"></DataGridCheckBoxColumn> 
      <DataGridTemplateColumn Header="List of strings"> 
       <DataGridTemplateColumn.CellTemplate> 
        <ItemContainerTemplate> 
         <ItemsControl ItemsSource="{Binding BindToListPropertyFromModel}"> 
         </ItemsControl> 
        </ItemContainerTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

我使用BindToBooleanPropertyFromModelBindToListPropertyFromModel作为占位符,分别指定类型为bool的财产的名称和类型为IEnumrable<T>的财产的名称。

+0

嘿,谢谢你。最后一个问题:您能否向我解释我如何正确创建绑定? XAML部分很清晰,但我必须做什么?我只是把方法(属性)放在ItemSource后面,它的工作原理是什么?或者我必须在我的.cs文件中执行其他操作? – Niclas

+0

你使用ViewModel和Models模式吗?你用什么数据源来填充'DataGrid'? – Redouane

+1

我想出了thx :) – Niclas