Joh*_*hnB 3 c# wpf wpf-controls wpfdatagrid
我DataGrid有一组默认的列显示,但我也想让用户选择/取消选择其应用程序上显示的列.在WPF中有相对简单的方法吗?
这DataGrid是必然的DataTable.
注意:RadioButton如果上述功能过于复杂,我可以通过解决方案使用简单的"默认列/所有列" .
简短的回答是,将Visibility每列的属性绑定到您能够设置的布尔标志(通过CheckBox或其他机制),并使用BooleanToVisibilityConverter使列可见性在未设置标志时折叠.
挖掘这个类似的问题,特别是这个答案!他的博客文章列出了我理想的解决方案.:)
将a 绑定DataGrid.Columns到包含可见性切换的a,除了以下内容之外无需代码:ItemsControlDataTemplateCheckBoxVisbilityToBoolConverter
<Window
...
DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}" Loaded="Window_Loaded">
<Window.Resources>
<local:VisibilityToBoolConverter x:Key="VisibilityToBoolConv"/>
</Window.Resources>
<StackPanel Orientation="Vertical">
<DataGrid ItemsSource="{Binding Data}" Name="DGrid"/>
<ItemsControl ItemsSource="{Binding ElementName=DGrid, Path=Columns}" Grid.IsSharedSizeScope="True" Margin="5">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A"/>
<ColumnDefinition SharedSizeGroup="B"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Header}" Margin="5"/>
<CheckBox Grid.Column="1" IsChecked="{Binding Visibility, Converter={StaticResource VisibilityToBoolConv}}" Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
注意:我有一个TextBlock假设Column-Header是一个字符串,如果不是这样的话可能需要调整.
VisibilityConverter:
[ValueConversion(typeof(Visibility), typeof(bool))]
public class VisibilityToBoolConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Visibility vis = (Visibility)value;
switch (vis)
{
case Visibility.Collapsed:
return false;
case Visibility.Hidden:
return false;
case Visibility.Visible:
return true;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if ((bool)value) return Visibility.Visible;
else return Visibility.Collapsed;
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4145 次 |
| 最近记录: |