xaml - 将gridview列绑定到checbox

时间:2018-02-07 10:39:17

标签: wpf xaml telerik

我正在使用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}}" />

2 个答案:

答案 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