【问题标题】:How can I bind WPF Grid Column Width in code?如何在代码中绑定 WPF 网格列宽?
【发布时间】:2010-10-29 10:37:41
【问题描述】:

在 WPF 中,我有一个定义了许多列的 Grid,并且每列的 Width 绑定到 DataGrid 列的宽度,如下所示:

<Grid.ColumnDefinitions>
   <ColumnDefinition Width="{Binding ElementName=dataGrid, Path=RowHeaderWidth}" />
   <ColumnDefinition Width="{Binding ElementName=Column0, Path=ActualWidth}" />
   <ColumnDefinition Width="{Binding ElementName=Column1, Path=ActualWidth}" />
   Etc.

<Controls:DataGrid BorderBrush="White"  ItemsSource="{Binding DataTable}"  
                   Name="datagrid1" Grid.Row="2" RowHeaderWidth="0">

    <Controls:DataGrid.Columns>
    <Controls:DataGridTextColumn  Header="Included"  Width="50" x:Name="Column0" />
    <Controls:DataGridTextColumn  Header="First" Width="100" x:Name="Column1" />
     Etc.

当我运行程序并手动调整列大小时,我可以看到 Grid 列正在调整大小 (ShowGridLines = true),并且与特定 Grid 列相关联的元素会适当移动。

但是,当我尝试在代码中添加数据网格和网格列时,我无法使绑定工作(没有绑定错误)。这是一个例子:

 binding = new Binding()
 {
    Source = dataGrid.Columns[col],
    Path = new PropertyPath("ActualWidth"),
    Mode = BindingMode.OneWay, 
 };

 colDef.SetBinding(WidthProperty, binding);

我尝试了其他变体(例如 ElementName = "DataGridColumn1", Path = new PropertyPath("ActualWidth") 但没有错误(也没有绑定)或“找不到绑定源”错误或 BindingExpression 路径错误.

一定有办法在代码中设置绑定...?

【问题讨论】:

    标签: wpf binding grid


    【解决方案1】:

    在我的项目中,我确实喜欢这个 - 认为值得一提,因为在我得到它之前我遇到了很多问题:

        DataGridTextColumn c = new DataGridTextColumn
        {
              // Binding to my value (not directly related to the question)
              Binding = new Binding
              {
                   Path = new PropertyPath(cd.Title + ".Value"),
                   Mode = BindingMode.TwoWay
              }
         };
    
         // Binding the width 
         BindingOperations.SetBinding(c, DataGridTextColumn.WidthProperty, new Binding
         {
               Source = cd,                        // An INotifying object
               Path = new PropertyPath("Width"),   // A Property of that object
               Mode = BindingMode.TwoWay
          });
    

    【讨论】:

      【解决方案2】:
      DataGridTextColumn textColumn = new DataGridTextColumn();
      textColumn.Width = DataGridLength.SizeToHeader;
      

      Google DataGridLength 以获取其他选项....

      【讨论】:

        【解决方案3】:

        我找到了答案。这一行:

         colDef.SetBinding(WidthProperty, binding);
        

        应该改为:

         colDef.SetBinding(ColumnDefinition.WidthProperty, binding);
        

        【讨论】:

          猜你喜欢
          • 2010-11-10
          • 2010-09-22
          • 1970-01-01
          • 2011-06-24
          • 1970-01-01
          • 1970-01-01
          • 2017-12-31
          • 1970-01-01
          • 2012-03-07
          相关资源
          最近更新 更多