Example:
With the following ViewModel:
public class ViewModel : INotifyPropertyChanged { public String Data1 { get; set; } public String Data2 { get; set; } public String Data3 { get; set; } }
You can use the following XAML sample:
<Grid.Resources> <local:DataGridColumnVisibilityConverter x:Key="DataGridColumnVisibilityConverter" /> </Grid.Resources> <DataGrid> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding Data1}" Visibility="{Binding, Converter={StaticResource DataGridColumnVisibilityConverter}, ConverterParameter=Data1}" /> <DataGridTextColumn Binding="{Binding Data2}" Visibility="{Binding, Converter={StaticResource DataGridColumnVisibilityConverter}, ConverterParameter=Data2}" /> <DataGridTextColumn Binding="{Binding Data3}" Visibility="{Binding, Converter={StaticResource DataGridColumnVisibilityConverter}, ConverterParameter=Data3}" /> </DataGrid.Columns> </DataGrid>
And the converter:
public class DataGridColumnVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { ViewModel viewModel = (ViewModel)value; switch (parameter.ToString().ToLower()) { case "data1": return (!String.IsNullOrEmpty(viewModel.Data1)) ? Visibility.Visible : Visibility.Collapsed; case "data2": return (!String.IsNullOrEmpty(viewModel.Data2)) ? Visibility.Visible : Visibility.Collapsed; case "data3": return (!String.IsNullOrEmpty(viewModel.Data3)) ? Visibility.Visible : Visibility.Collapsed; } return Visibility.Visible; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
source share