Wpf xaml-将gridview列绑定到checbox
我使用的是telerik radgridviews,我有一些列,只有在选中复选框时才显示。复选框位于网格之外,而我要显示/隐藏的列位于另一个网格之内。这是我尝试过的,但似乎不起作用:Wpf xaml-将gridview列绑定到checbox,wpf,xaml,telerik,Wpf,Xaml,Telerik,我使用的是telerik radgridviews,我有一些列,只有在选中复选框时才显示。复选框位于网格之外,而我要显示/隐藏的列位于另一个网格之内。这是我尝试过的,但似乎不起作用: <Grid> <Checkbox Name = "test"> </Grid> <telerik:RadGridView ...> <telerik:RadGridView.Columns> <telerik:GridVie
<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>
试试这个(来源)
更改x:Name=“test”
的Name=“test”
(差异)如果我理解正确,您希望根据复选框更改GridViewDataColumn
的可见性,基本上有两种方法:
- 要做到这一点,简单而直接的方法是使用
elementname
将列的IsVisible
属性绑定到复选框的IsChecked
属性:
<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>
确保实现INotifyPropertyChanged接口,并正确设置不熟悉FrameworkElement的DataContext
。我还需要复选框吗?@user1855165当然,您可以使用复选框代替它。复选框上的绑定需要双向:IsChecked=“{binding IsChecked,Mode=TwoWay}”
@Shawn谢谢,但它仍然不起作用,不确定这是否与telerik或其他东西有关。。
<FrameworkElement x:Name="dummyElement" Visibility="Collapsed" />
<DataGrid .... >
<DataGrid.Columns>
<DataGridTextColumn Visibility="{Binding DataContext.IsChecked,
Source={x:Reference dummyElement},
Converter={StaticResource BooleanToVisibilityConverter}}" />
</DataGrid.Columns>
</DataGrid>
<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>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<CheckBox Name="ChkBox" IsChecked="{Binding IsCheckedP}"/>
</Grid>
<telerik:RadGridView Grid.Row="1">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn IsVisible="{Binding IsCheckedP}" Header="First Name" UniqueName="FirstName" />
<telerik:GridViewDataColumn Header="Last Name" UniqueName="LasttName" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
</Grid>
private bool _isChecked;
public bool IsCheckedP
{
get { return _isChecked; }
set
{
_isChecked = value;
OnPropertyChanged();
}
}
public ViewModel()
{
//...
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}