我的数据网格中有以下 DataGridTextColumn:
<my:DataGridTextColumn Visibility="{Binding Path=DataContext.Filter, Converter={StaticResource ColumnVisibilityConverter}">
过滤器是视图模型中的一个属性:
private EnumStatus filter;
public EnumStatus Filter
{
get { return filter; }
set
{
if (!filter.Equals(value))
{
filter= value;
OnPropertyChanged("Filter");
}
}
}
EnumStatus 是一个枚举:
public enum EnumEstatRemesa
{
Pending,
Approved,
Reviewing
};
转换器:
public class ColumnVisibilityConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
EnumStatus status = (EnumStatus)value;
return (status == EnumStatus.Pending) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在窗口中创建资源:
<Window.Resources>
<ColumnVisibilityConverter x:Key="ColumnVisibilityConverter"/>
</Window.Resources>
我的问题是永远不会调用转换器。为什么?
调试时,输出窗口显示:
System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。BindingExpression:Path=DataContext.Filter; 数据项=空;目标元素是“DataGridTextColumn”(HashCode=20546761);目标属性是“可见性”(类型“可见性”)