MVVM框架下 WPF隐藏DataGrid一列
最近的一个项目,需要在部分用户登录的时候,隐藏DataGrid中的一列,但是常规的绑定不好使,在下面举个例子。
XAML部分代码
<Window x:Class="DataGridColumn.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:DataGridColumn" Title="MainWindow" Height="350" Width="525"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="50"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <StackPanel Grid.Row="0"> <Button Content="显示" Command="{Binding Button1Command}"/> <Button Content="隐藏" Command="{Binding Button2Command}"/> </StackPanel> <DataGrid Grid.Row="1" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="列一"/> <DataGridTextColumn Header="列二"/> <DataGridTextColumn Header="列三" Visibility="{Binding DataContext.IsVisibility,RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/> </DataGrid.Columns> </DataGrid> </Grid> </Window>
ViewModel部分代码
using GalaSoft.MvvmLight.Command; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace DataGridColumn { public class MainWindowVM : INotifyPropertyChanged { public MainWindowVM() { IsVisibility = Visibility.Hidden; } public event PropertyChangedEventHandler PropertyChanged; private void INotifyPropertyChanged(string name) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(name)); } } private Visibility isVisibility; public Visibility IsVisibility { get { return isVisibility; } set { isVisibility = value; INotifyPropertyChanged("IsVisibility"); } } private RelayCommand button1Command; public RelayCommand Button1Command { get { return button1Command = new RelayCommand( () => { IsVisibility = Visibility.Visible; }); } } private RelayCommand button2Command; public RelayCommand Button2Command { get { return button2Command = new RelayCommand( () => { IsVisibility = Visibility.Hidden; }); } } } }