如何在C#代码中为具有特定模板的数据网格生成一列wpf

问题描述:

我有这段代码,工作良好,但我想在C#中动态更改它。任何人都可以帮助我将这个XAML代码转换为C#代码吗?如何在C#代码中为具有特定模板的数据网格生成一列wpf

注:我的C#代码页面加载设置此数据网格中的ItemSource

注:我想以后转换该列C#代码,变化的AutoGenerateColumns为true

<DataGrid x:Name="dg" AutoGenerateColumns="False"> 
       <DataGrid.Columns> 
        <DataGridTemplateColumn> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
            <TextBlock Text="{Binding ValueA}" /> 
            <TextBlock Text="{Binding ValueB}" /> 
           </StackPanel> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
       </DataGrid.Columns> 
      </DataGrid> 
+0

为什么要将其转换为C#?维护起来要困难得多,而且不会改善任何事情。你最好离开它。 –

+0

因为我想在单元格中显示两个值,并且列数有所不同 – sadegh

+0

为什么不将DataTemplate设置为资源? [这是一个答案,显示如何给DataGrid动态列](https://*.com/a/4379965/424129)。 –

的AutoGenerateColumns = false:

public partial class MyPage:Page 
{ 
    public MyPage() 
    { 
     InitializeDataGrid(); 
     Loaded += MyPage_Loaded; 

     // don't forget to add the _dataGrid into the page 
     this.Content = _dataGrid; 
    } 

    private void MyPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     //_dataGrid.ItemsSource = xxx; 
    } 

    private void InitializeDataGrid() 
    { 
     // <DataGrid x:Name="dg" AutoGenerateColumns="False"> 
     // <DataGrid.Columns> 
     //  <DataGridTemplateColumn> 
     //   <DataGridTemplateColumn.CellTemplate> 
     //    <DataTemplate> 
     //     <StackPanel Orientation="Horizontal"> 
     //      <TextBlock Text="{Binding ValueA}" /> 
     //      <TextBlock Text="{Binding ValueB}" /> 
     //     </StackPanel> 
     //    </DataTemplate> 
     //   </DataGridTemplateColumn.CellTemplate> 
     //  </DataGridTemplateColumn> 
     // </DataGrid.Columns> 
     //</DataGrid> 

     // StackPanel and Children 
     var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel)); 
     stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal); 

     var textBlockFactoryA = new FrameworkElementFactory(typeof(TextBlock)); 
     textBlockFactoryA.SetBinding(TextBlock.TextProperty, new Binding("ValueA")); 

     var textBlockFactoryB = new FrameworkElementFactory(typeof(TextBlock)); 
     textBlockFactoryB.SetBinding(TextBlock.TextProperty, new Binding("ValueB")); 

     stackPanelFactory.AppendChild(textBlockFactoryA); 
     stackPanelFactory.AppendChild(textBlockFactoryB); 

     // DataTemplate 
     var dataTemplate = new DataTemplate 
     { 
      VisualTree = stackPanelFactory 
     }; 

     // DataGridTemplateColumn 
     var templateColumn = new DataGridTemplateColumn 
     { 
      CellTemplate = dataTemplate 
     }; 

     _dataGrid.Columns.Add(templateColumn); 

     // DataGrid 
     _dataGrid.Name = "gd"; 
     _dataGrid.AutoGenerateColumns = false; 
    } 

    private readonly DataGrid _dataGrid = new DataGrid(); 
} 

AutoGenerateColumns = true:

public partial class MyPage:Page 
{ 
    public MyPage() 
    { 
     InitializeDataGrid(); 
     Loaded += MyPage_Loaded; 

     // don't forget to add the _dataGrid into the page 
     this.Content = _dataGrid; 
    } 

    private void MyPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     //_dataGrid.ItemsSource = xxx; 
    } 

    private void InitializeDataGrid() 
    { 
     // <DataGrid x:Name="dg" AutoGenerateColumns="False"> 
     // <DataGrid.Columns> 
     //  <DataGridTemplateColumn> 
     //   <DataGridTemplateColumn.CellTemplate> 
     //    <DataTemplate> 
     //     <StackPanel Orientation="Horizontal"> 
     //      <TextBlock Text="{Binding ValueA}" /> 
     //      <TextBlock Text="{Binding ValueB}" /> 
     //     </StackPanel> 
     //    </DataTemplate> 
     //   </DataGridTemplateColumn.CellTemplate> 
     //  </DataGridTemplateColumn> 
     // </DataGrid.Columns> 
     //</DataGrid> 

     //// StackPanel and Children 
     //var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel)); 
     //stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal); 

     //var textBlockFactoryA = new FrameworkElementFactory(typeof(TextBlock)); 
     //textBlockFactoryA.SetBinding(TextBlock.TextProperty, new Binding("ValueA")); 

     //var textBlockFactoryB = new FrameworkElementFactory(typeof(TextBlock)); 
     //textBlockFactoryB.SetBinding(TextBlock.TextProperty, new Binding("ValueB")); 

     //stackPanelFactory.AppendChild(textBlockFactoryA); 
     //stackPanelFactory.AppendChild(textBlockFactoryB); 

     // DataTemplate 
     var dataTemplate = new DataTemplate 
     { 
      //VisualTree = stackPanelFactory 
     }; 

     // DataGridTemplateColumn 
     var templateColumn = new DataGridTemplateColumn 
     { 
      CellTemplate = dataTemplate 
     }; 

     _dataGrid.Columns.Add(templateColumn); 

     // DataGrid 
     _dataGrid.Name = "gd"; 
     _dataGrid.AutoGenerateColumns = true; 
    } 

    private readonly DataGrid _dataGrid = new DataGrid(); 
}