2012-05-19

Articles

ColumnVisibilityBehavior

 

Applications with lists mostly have the possibility to let the user define which column should be visible or not. With this behavior you can have an easy access to it, just define all columns and bind a list with the names of the visible columns. This behavior attaches this functionality to all controls with a GridViewHeaderRowPresenter.

 

alt

 

Usage

<UserControl x:Class="DW.Interactivity.Demo.ColumnVisibilityBehaviorControl"
			 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
			 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
			 xmlns:Interactivity="http://schemas.my-libraries.de/wpf/interactivity">
	<DockPanel>
		<Button Content="Show or hide last column"
				DockPanel.Dock="Bottom"
				HorizontalAlignment="Right"
				Command="{Binding SwitchColumnCommand}" />
		<ListView ItemsSource="{Binding Customers}"
				  Interactivity:ColumnVisibilityBehavior.VisibleColumns="{Binding VisibleColumns}">
			<ListView.View>
				<GridView>
					<GridViewColumn Header="Name"
								Interactivity:ColumnVisibilityBehavior.Name="first"
								DisplayMemberBinding="{Binding Name}" />
					<GridViewColumn Header="Family Name"
								Interactivity:ColumnVisibilityBehavior.Name="second"
								DisplayMemberBinding="{Binding FamilyName}" />
				</GridView>
			</ListView.View>
		</ListView>
	</DockPanel>
</UserControl>
using System.Windows.Controls;
using System.Windows.Input;
using DW.Interactivity.Demo.Data;
using DW.SharpTools;

namespace DW.Interactivity.Demo
{
	public partial class ColumnVisibilityBehaviorControl : UserControl
	{
		public ColumnVisibilityBehaviorControl()
		{
			InitializeComponent();
			DataContext = this;

			SwitchColumnCommand = new DelegateCommand(p => SwitchColumn());

			Customers = new EnhancedObservableCollection<Customer>();
			Customers.AddRange(CustomerRepository.CreateDummyData());

			VisibleColumns = new EnhancedObservableCollection<string>();
			VisibleColumns.Add("first");
			VisibleColumns.Add("second");
		}

		public ICommand SwitchColumnCommand { get; set; }
		private void SwitchColumn()
		{
			if (VisibleColumns.Count == 1)
				VisibleColumns.Add("second");
			else
				VisibleColumns.Remove("second");
		}

		public EnhancedObservableCollection<Customer> Customers { get; set; }

		public EnhancedObservableCollection<string> VisibleColumns { get; set; }
	}
}

 

 

Note

This control needs the DW.SharpTools.