WPF launches datagrid to hide / show columns according to bindings

I have a data grid like this:

<DataGrid AutoGenerateColumns="False" CanUserDeleteRows="True" HorizontalScrollBarVisibility="Hidden" Margin="10,10,10,10" VerticalScrollBarVisibility="Visible" CanUserAddRows="False" ItemsSource="{Binding ListGestores}" ToolTip="Selecione uma linha e pressione DELETE para remover uma unidade."> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding TB_UNIDADE.DS_NOME_UNIDADE}" CanUserResize="False" Header="Setor" IsReadOnly="True" x:Name=""/> <DataGridTextColumn Binding="{Binding TB_UNIDADE.TB_UNIDADE2.DS_NOME_UNIDADE}" CanUserResize="False" Header="Unidade" IsReadOnly="True" x:Name=""/> <DataGridTextColumn Binding="{Binding TB_CONTATOS.DS_NOME}" CanUserResize="False" Header="Gestor" IsReadOnly="True" /> </DataGrid.Columns> </DataGrid> 

The problem is that I need to check if the binding of column 2 is zero, and if it is zero, I need to hide it and change the title of column 1.

I know I can do this with triggers, but how exactly ??? I started with:

 <DataGrid.Triggers> <DataTrigger Binding="{Binding TB_UNIDADE.TB_UNIDADE2}" Value="{x:Null}"> <Setter Property="" Value="" /> </DataTrigger> </DataGrid.Triggers> 

But I don’t know which setter or something else to put!

Help me =]

+4
source share
1 answer

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(); } } 
+2
source

Source: https://habr.com/ru/post/1332896/


All Articles