如何在DataGrid中设置DisplayMemberPath?

时间:2013-01-21 06:12:21

标签: c# wpf xaml datagrid

我正在努力使用Wpf DataGrid。其ItemsSourceDataTable,其中由类型单元格Tuple<int, string>

组成

以下是一些关于如何创建DataTable

的代码段
            // Create columns
            for (int j = 0; j < maxCount; j++) {
                dt.Columns.Add(selectedTests[i].Name + " " + (j + 1).ToString(), typeof(Tuple<int, string>));
            }

            // Create rows 
            for (int k = 0; k < tuple.Item2.Count; k++) {
                var newRow = dt.NewRow();
                dt.Rows.Add(newRow);
            }

            ...
            dt.Rows[k][i + m] = new Tuple<int, string>(n, str);

然后我将此DataTable设置为DataGrid,我想只显示元组中的属性Item2,此时我需要保留元组实例。并且无法定义我的列以设置displaymemberPath,因为它是自动生成的。

    <DataGrid  x:Name="dataGrid" LoadingRow="dataGrid_LoadingRow_1" ItemsSource="{Binding DataTable}" DisplayMemberPath="{Binding Item2}">

我的datagrid一直转换为字符串我的元组:

enter image description here

2 个答案:

答案 0 :(得分:0)

正如question所述,您可以设置与代码隐藏的绑定。

因此,您可以订阅yourgrid_AutoGeneratingColumn事件并执行此操作:

(e.Column as DataGridTextColumn).Binding = new Binding("Title");

当然您应该通过某些解决方案将ColumnName传递给AutoGeneratingColumn事件......

答案 1 :(得分:-1)

您只需手动设置列并将其绑定到Item2列。

<DataGrid ItemsSource="{Binding DataTablePropertyInYourDataContext}">
<DataGrid.Columns>
<DataGridTextColumn 
            Header="Item2" 
            Binding="{Binding ColumnNameInYourDataTable}" 
            />
</DataGrid.Columns>
</DataGrid>

或其他解决方法:您可以订阅AutoGeneratingColumn事件,当不需要列等于true时设置取消。在MSDN

上查看此内容

希望有所帮助