【问题标题】:How to programmatically binding width DataGridColumn from another DataGridColumn如何以编程方式从另一个 DataGridColumn 绑定宽度 DataGridColumn
【发布时间】:2018-10-26 23:32:27
【问题描述】:

我正在尝试以编程方式将一个表中的列的宽度绑定到另一个表中的列的宽度。我该怎么做?这是我的代码:

DataGridTextColumn classNameColumn = new DataGridTextColumn();
classNameColumn.Header = "CLASS";
classNameColumn.Binding = new Binding("CLASS_NAME");
classNameColumn.IsReadOnly = true;
ScheduleGrid.Columns.Add(classNameColumn);

DataGridTextColumn noneColumn = new DataGridTextColumn();
noneColumn.Header = "";
var bindingWidth = new Binding("Width") { Source = classNameColumn, Mode = BindingMode.TwoWay };
BindingOperations.SetBinding(noneColumn, WidthProperty, bindingWidth);
WeeekHeaderGrid.Columns.Add(noneColumn);

在 XAML 代码中可以正常工作:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <DataGrid x:Name="ScheduleGrid" Grid.Row="1" AutoGenerateColumns="False" SelectionMode="Single"
              CanUserReorderColumns="False" CanUserAddRows="False" CanUserSortColumns="False"
              CellEditEnding="ScheduleGrid_CellEditEnding">
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="ClassName" Header="CLASS" Binding="{Binding CLASS_NAME}" />
        </DataGrid.Columns>
    </DataGrid>
    <DataGrid x:Name="WeeekHeaderGrid" Grid.Row="0" CanUserReorderColumns="False" CanUserAddRows="False" CanUserSortColumns="False" CanUserResizeColumns="True">
        <DataGrid.Columns>
            <DataGridTextColumn Header="" Width="{Binding Source={x:Reference ClassName}, Path=Width, Mode=TwoWay}"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

【问题讨论】:

  • "在 XAML 代码中这个工作正常:" -- 所以...
  • @EdPlunkett 我正在尝试使用 C# 代码中的循环创建表列。 XAML 解决方案不适合我
  • @EdPlunkett,保证给定的 xaml 标记有等效的 c# 代码,但 c# 实现有时并不明显
  • @ASh 真。但在 XAML 中执行它通常是一个更好的主意。

标签: c# wpf xaml data-binding datagrid


【解决方案1】:
Width="{Binding ElementName=ClassName, Path=ActualWidth}"

应该可以的。

【讨论】:

  • 我的 XAML 解决方案也可以工作。但它不适合我。我正在尝试使用 C# 代码中的循环创建表列。
【解决方案2】:

您在代码中使用了不正确的WidthProperty DP。

改成

BindingOperations.SetBinding(noneColumn, DataGridColumn.WidthProperty, bindingWidth);

DataGridColumn.WidthProperty 的类型为 DataGridLength

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2013-07-25
    • 2011-06-03
    • 2012-03-26
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多