从DataGridTextColumn.HeaderTemplate复选框设置DataGridTextColumn IsReadonly属性

时间:2014-07-16 15:12:21

标签: c# wpf datagrid

我有WPF DataGrid,我正在显示一些数据。如果他/她检查标题中的复选框,我需要为用户提供编辑数据的选项。这是我所做的WPF部分。

<DataGrid.Columns>
    <DataGridTextColumn Header="MaxLength" Binding="{Binding MaxLength}">
        <DataGridTextColumn.HeaderTemplate>
            <DataTemplate>
                <CheckBox x:Name="AAOverride" Content="Increase Max Length" />
            </DataTemplate>
        </DataGridTextColumn.HeaderTemplate>
    </DataGridTextColumn>
</DataGrid.Columns>

我想根据用户选择启用/禁用MaxLength列。我正在关注MVVM,所以我没有代码隐藏选项:(

1 个答案:

答案 0 :(得分:0)

只需使用RelativeSource绑定即可访问根视图模型。我想这样的事情(也需要一个IValueConverter否定bool的“增加最大长度” - &gt;“只读”):

<DataGrid.Columns>
    <DataGridTextColumn Header="MaxLength" Binding="{Binding MaxLength}"
        IsReadOnly="{Binding 
            RelativeSource={RelativeSource AncestorType=DataGrid},
            Path=DataContext.IsMaxLengthEnabled,
            Converter={StaticResource NegateBool}}">
        <DataGridTextColumn.HeaderTemplate>
            <DataTemplate>
                <CheckBox x:Name="AAOverride" Content="Increase Max Length" 
                    IsChecked="{Binding RelativeSource={RelativeSource AncestorType=DataGrid},
                                Path=DataContext.IsMaxLengthEnabled,
                                Mode=TwoWay}"
                 />
            </DataTemplate>
        </DataGridTextColumn.HeaderTemplate>
    </DataGridTextColumn>
</DataGrid.Columns>