DataGridTemplateColumn Visibility 属性不支持直接绑定。据说是不在视觉树上,也不会继承DataContext。
下面我们来通过代理来实现绑定。
- 首先定义代理:
namespace WpfMVVM.Helpers
{
public class VisibilityBindingProxy: Freezable
{
public Visibility Data
{
get { return (Visibility)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register("Data", typeof(Visibility), typeof(VisibilityBindingProxy), new PropertyMetadata(Visibility.Collapsed));
protected override Freezable CreateInstanceCore()
{
return new VisibilityBindingProxy();
}
}
}
- 添加引用
xmlns:helpers="clr-namespace:WpfMVVM.Helpers"
- 添加资源
<Window.Resources>
<helpers:VisibilityBindingProxy x:Key="ColumnVisible" Data="{Binding ColumnVisible}"/>
</Window.Resources>
- 绑定
<DataGridTemplateColumn Visibility="{Binding Data, Source={StaticResource ColumnVisible}}" Header="Col2" CellTemplate="{StaticResource col2}"></DataGridTemplateColumn>