Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf xaml-将gridview列绑定到checbox_Wpf_Xaml_Telerik - Fatal编程技术网

Wpf xaml-将gridview列绑定到checbox

Wpf xaml-将gridview列绑定到checbox,wpf,xaml,telerik,Wpf,Xaml,Telerik,我使用的是telerik radgridviews,我有一些列,只有在选中复选框时才显示。复选框位于网格之外,而我要显示/隐藏的列位于另一个网格之内。这是我尝试过的,但似乎不起作用: <Grid> <Checkbox Name = "test"> </Grid> <telerik:RadGridView ...> <telerik:RadGridView.Columns> <telerik:GridVie

我使用的是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>

试试这个(来源)



更改
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));
    }