Reputation: 7017
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 verify if the 2 column binding is null, and if it is null, i need to Hide it, and Change the Header of the column 1.
I know that i can do that 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 what setter or whatever to put !
Help me =]
Upvotes: 4
Views: 11480
Reputation: 30840
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 following sample 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>
And 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();
}
}
Upvotes: 1