我正在使用telerik radgridviews,我只有在选中复选框时才会显示一些列。复选框位于网格之外,我想要显示/隐藏的列位于另一个网格内。这是我尝试过的,但似乎不起作用:
<Grid>
<Checkbox Name = "test">
</Grid>
<telerik:RadGridView ...>
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn>
<telerik:GridViewDataColumn.CellTemplate>
<DataTemplate>
<telerik:RadGridView ...
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn IsVisible="{Binding IsChecked,Source={x:Reference test}, Converter{StaticResource BooleanToVis}}" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
更新#2 所以我有下面的,但它似乎没有工作。我没有得到任何绑定问题,但检查或取消选中复选框都没有做任何事情。
public bool IsChecked
{
get
{
return isChecked;
}
set
{
if (isChecked != value)
{
isChecked = value;
NotifyPropertyChanged(nameof(IsChecked));
}
}
}
<BooleanToVisibilityConverter x:Key="BooleanToVis"/>
<CheckBox x:Name="showCols" Content="test" IsChecked="{Binding IsChecked}"/>
<telerik:GridViewDataColumn DataMemberBinding="{Binding x}" IsVisible="{Binding DataContext.IsChecked,Source={x:Reference showCols},Converter={StaticResource BooleanToVis}}" />
答案 0 :(得分:2)
如果我理解正确您希望根据GridViewDataColumn
更改checkbox
的可见度,则基本上有两种方法可以做到:
简单直接的方法是使用{将列的IsVisible
属性绑定到CheckBox
的{{1}}属性{1}}:
IsChecked
另一种方法是将复选框的elementname
依赖项属性和<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<CheckBox Name="ChkBox" />
</Grid>
<telerik:RadGridView Grid.Row="1">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn IsVisible="{Binding Path=IsChecked, ElementName=ChkBox}" Header="First Name" UniqueName="FirstName" />
<telerik:GridViewDataColumn Header="Last Name" UniqueName="LasttName" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</Grid>
的{{1}}绑定到同一属性:
IsChecked
确保实施 INotifyPropertyChanged 界面并正确设置IsVisible
。
答案 1 :(得分:0)
试试这个(来源here)
<FrameworkElement x:Name="dummyElement" Visibility="Collapsed" />
<DataGrid .... >
<DataGrid.Columns>
<DataGridTextColumn Visibility="{Binding DataContext.IsChecked,
Source={x:Reference dummyElement},
Converter={StaticResource BooleanToVisibilityConverter}}" />
</DataGrid.Columns>
</DataGrid>
更改Name="test"
x:Name="test"
(差异here)