.net 所有DataGrid标头必须具有唯一的名称-如何解决此问题

.net 所有DataGrid标头必须具有唯一的名称-如何解决此问题,.net,wpf,data-binding,datagrid,datatable,.net,Wpf,Data Binding,Datagrid,Datatable,我使用的是DataGrid,其中AutogenerateColumns设置为true 我通过它的DataContext属性将它绑定到弱类型的DataTable 我遇到的问题是,所有标题都必须具有唯一的名称,因为myGrid.Columns[x]。标题值直接绑定到基础DataTable的列名(显然,不允许重复列名) 是否有合理的解决方法?以下代码未经测试 要更改DataGridHeader,您必须覆盖其ContentTemplate <DataGrid.Resources>

我使用的是
DataGrid
,其中
AutogenerateColumns
设置为
true

我通过它的
DataContext
属性将它绑定到弱类型的
DataTable

我遇到的问题是,所有标题都必须具有唯一的名称,因为
myGrid.Columns[x]。标题
值直接绑定到基础
DataTable
的列名(显然,不允许重复列名)


是否有合理的解决方法?

以下代码未经测试

要更改DataGridHeader,您必须覆盖其ContentTemplate

    <DataGrid.Resources>   
     <Style TargetType="{x:Type dg:DataGridColumnHeader}">
      <Setter Property="ContentTemplate">
         <Setter.Value>
            <DataTemplate>
               <StackPanel>
                   <TextBlock>
                      <TextBlock.Text>
                          <MultiBinding Converter="{StaticResource DynamicColumnHeaderTextConverter}">
                               <Binding BindsDirectlyToSource="True"/>
                               <Binding Path="ItemsSource" RelativeSource="{RelativeSource AncestorType={x:Type dg:DataGrid}}" />
                          </MultiBinding>
                      </TextBlock.Text>
                   </TextBlock> 
               </StackPanel>
           </DataTemplate>
         </Setter.Value>
      </Setter>
     </Style>
    </DataGrid.Resources>

如果有帮助,请告诉我。

您能详细说明您的问题吗?DataTable不是在做您想要的事情(列名的唯一性)吗?我希望在
数据网格
-显示名称中有非唯一的标题;在UI中!不影响
数据表中的列名(这会导致引发异常)。我根本不希望(可见)标题名与(逻辑)列名相连接;但到现在为止,他们是。谢谢!我明天就试试这个(我今天快做完了:))。顺便说一句,我已经重写了
DataGridColumnHeader
ContentTemplate
,所以我将合并您建议的代码。我会让你知道我试过了,但不幸的是它不起作用。我收到一个XamlParseException:“不能在类型为“Binding”的“Path”属性上设置“Binding”。只能在DependencyObject的DependencyProperty上设置“Binding”。“嘿,Vibo,很抱歉代码错误。。。应该是。。。我已经编辑了上面的代码。。。对不起,又给你添麻烦了!谢谢你,但它也不起作用。我现在在家里用你更新的示例代码创建了一个小项目,我又遇到了同样的例外:不能在“Binding”类型的“Path”属性上设置“Binding”。“绑定”只能在DependencyObject的DependencyProperty上设置。我肯定我做错了什么,但我不知道它是什么。我会继续努力的。
    public class DynamicColumnHeaderTextConverter : IMultiValueConverter
    {
         public object Convert(object[] values, ...)
         {
              var columnName = (string)values[0];
              var dataTable = (DataTable)values[1]; //// if you want to decide name based on some value in the DataTable.
              switch(columnName)
              {
                   case "MyColumn1" : return "MyColumn";
                   case "MyColumn2" : return "MyColumn";
              }

              return columnName; 
         }
    }