我有一个简单的Datagrid,我想在Datagrid的底部显示一个Totals行。我知道有很多方法可以做到这一点,但我选择在底部有第二个DataGrid来保存Column Totals。 Top(主)DataGrid将绑定到某些数据表,而具有一行的底部(Total DataGrid)将绑定到我将使用某个公式生成的数据表列总数。
我想要做的事情的魔力是每当我重新排列顶部的列位置时,底部的列也应该相应地重新排列。同样,如果我在Top DataGrid上更改Column宽度,则底部列宽也应相应更改。
调整底部宽度似乎很容易,因为我使用了第1列的示例:Width="{Binding Source={x:Reference Column1}, Path=ActualWidth}"
,如下所示使用了XAML绑定。我选择x:Reference
的原因是(我被告知)除了使用x引用之外,没有简单的方法可以引用DataGrid
列名(假设这是真的)。我注意到上面的宽度绑定带有下划线,表示虽然在运行时它仍然可以识别绑定。
将底部DataGrid
的列位置与顶部DataGrid
的列位置同步,只能在后面的代码中完成,如下所示: {{1 }} 不起作用并冻结应用程序。
我有两个问题:
这是XAML和背后的c#代码
DisplayIndex="{Binding Source={x:Reference Column1}, Path=Actual DisplayIndex }"
以下是调节列索引(位置)
中任何更改的代码<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="273*" />
<RowDefinition Height="60" />
</Grid.RowDefinitions>
<DataGrid x:Name="TopDataGrid" ColumnDisplayIndexChanged="TopDataGrid_ColumnDisplayIndex">
<DataGrid.Columns>
<DataGridTextColumn x:Name="Column1" Header="Column 1" Width="*" />
<DataGridTextColumn x:Name="Column2" Header="Column 2" Width="3*" />
<DataGridTextColumn x:Name="Column3" Header="Column 3" Width="*" />
<DataGridTextColumn x:Name="Column4" Header="Column 4" Width="*" />
</DataGrid.Columns>
</DataGrid>
<DataGrid x:Name="BottomDataGrid" Grid.Row="1">
<DataGrid.Columns>
<DataGridTextColumn x:Name="TotalColumn1" Header="Total Column 1" Width="{Binding Source={x:Reference Column1}, Path=ActualWidth}" />
<DataGridTextColumn x:Name="TotalColumn2" Header="Total Column 2" Width="{Binding Source={x:Reference Column2}, Path=ActualWidth}" />
<DataGridTextColumn x:Name="TotalColumn3" Header="Total Column 3" Width="{Binding Source={x:Reference Column3}, Path=ActualWidth}" />
<DataGridTextColumn x:Name="TotalColumn4" Header="Total Column 4" Width="{Binding Source={x:Reference Column4}, Path=ActualWidth}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
就像我说的那样,我确信还有其他(甚至更好)的方式来做我想要实现的目标。但在你提出其他方法之前,请帮我解决这个问题。
我们当中有70亿人肯定有人可以解决这个问题。我们不需要UFO来解决它!!!!!
答案 0 :(得分:0)
初始化列后,您可以以编程方式绑定到DisplayIndex
属性:
public MainWindow()
{
InitializeComponent();
...
Loaded += (s, e) =>
{
BindingOperations.SetBinding(TotalColumn1, DataGridColumn.DisplayIndexProperty, new Binding("DisplayIndex") { Source = Column1 });
};
}