Пример:
Со следующей моделью представления:
public class ViewModel : INotifyPropertyChanged
{
public String Data1 { get; set; }
public String Data2 { get; set; }
public String Data3 { get; set; }
}
Вы можете использовать следующий пример XAML:
<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>
И преобразователь:
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();
}
}