RadGridView将列宽绑定到另一列?

时间:2018-04-03 15:45:26

标签: wpf user-interface data-binding telerik-grid radgridview

我有一个RadGridView(Telerik),它有一些列。在行详细信息模板中,我有另一个网格视图,显示具有相同列的子项。这适用于初始显示,但我希望详细信息模板的列宽遵循主网格的宽度(详细信息模板没有标题)。

我尝试给主列命名并绑定到' Width'和' ActualWidth'该列的属性按名称列出,但似乎没有给出任何绑定错误。

有没有办法将一个RadGridView上的列的宽度绑定到另一个RadGridView上的列的宽度?

修改

根据下面的建议,我尝试将视图绑定到标记并按照这种方式进行,但它似乎无法正常工作。它适用于文本块,但不设置列宽。这是我看到的视频:

https://www.screencast.com/t/BiHmiarQExV

以下是我使用的代码:

    <telerik:RadGridView Grid.Row="2" ItemsSource="{Binding RenumberNotes}" x:Name="tgr" AutoGenerateColumns="False"
                         RowDetailsVisibilityMode="Visible">
        <telerik:RadGridView.Columns>
            <telerik:GridViewDataColumn UniqueName="columnName" DataMemberBinding="{Binding CurrentValue}" Width="100" />
        </telerik:RadGridView.Columns>
        <telerik:RadGridView.RowStyle>
            <Style TargetType="telerik:GridViewRow" BasedOn="{StaticResource {x:Type telerik:GridViewRow}}">
                <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType=telerik:RadGridView}}" />
            </Style>
        </telerik:RadGridView.RowStyle>
        <telerik:RadGridView.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="10,10,10,10">
                        <TextBlock Text="Column width: " />
                        <TextBlock
                            Text="{Binding Tag.Columns[columnName].ActualWidth, RelativeSource={RelativeSource AncestorType=telerik:GridViewRow}}" />
                    </StackPanel>
                    <telerik:RadGridView AutoGenerateColumns="False" ItemsSource="{Binding Subnotes}">
                        <telerik:RadGridView.Columns>
                            <telerik:GridViewColumn Header="test" Width="{Binding Tag.Columns[columnName].ActualWidth, RelativeSource={RelativeSource AncestorType=telerik:GridViewRow}}" />
                        </telerik:RadGridView.Columns>

                    </telerik:RadGridView>
                </StackPanel>
            </DataTemplate>
        </telerik:RadGridView.RowDetailsTemplate>
    </telerik:RadGridView>

如您所见,它正确更新了文本块,因此绑定正确,但列宽度未更新。

1 个答案:

答案 0 :(得分:1)

  

有没有办法将一个RadGridView上列的宽度绑定到另一个RadGridView上的列宽?

是。您可以定义RowStyle,将Tag的{​​{1}}属性绑定到父GridViewRow,然后使用此属性绑定到RadGridView的{​​{1}}集合。网格。以下是您的示例:

Columns

修改

  

如您所示,它适用于<telerik:RadGridView x:Name="tgr" AutoGenerateColumns="False" RowDetailsVisibilityMode="VisibleWhenSelected"> <telerik:RadGridView.Columns> <telerik:GridViewDataColumn UniqueName="columnName" DataMemberBinding="{Binding Name}" Width="100" /> </telerik:RadGridView.Columns> <telerik:RadGridView.RowStyle> <Style TargetType="telerik:GridViewRow" BasedOn="{StaticResource {x:Type telerik:GridViewRow}}"> <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType=telerik:RadGridView}}" /> </Style> </telerik:RadGridView.RowStyle> <telerik:RadGridView.RowDetailsTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Margin="10,10,10,10"> <TextBlock Text="Column width: " /> <TextBlock Text="{Binding Tag.Columns[columnName].ActualWidth, RelativeSource={RelativeSource AncestorType=telerik:GridViewRow}}" /> </StackPanel> </DataTemplate> </telerik:RadGridView.RowDetailsTemplate> </telerik:RadGridView> ,但以相同的方式绑定列宽并不会做任何事情。

是的,因为列本身不是可视树的一部分。然后你必须编写一些代码。您只需处理内部Textblock的{​​{1}}事件:

Loaded

<强> XAML:

RadGridView

这是更清洁,并没有打破任何模式。