gpt4 book ai didi

c# - 转换器不点火

转载 作者:行者123 更新时间:2023-12-03 11:02:50 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Binding Visibility for DataGridColumn in WPF

(3 个回答)


4年前关闭。




我的数据网格中有以下 DataGridTextColumn:

<my:DataGridTextColumn Visibility="{Binding Path=DataContext.Filter, Converter={StaticResource ColumnVisibilityConverter}"> 

过滤器是 View 模型中的一个属性:
        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 Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=DataContext.Filter; DataItem=null; target element is 'DataGridTextColumn' (HashCode=20546761); target property is 'Visibility' (type 'Visibility')

最佳答案

我在这里看到几个问题:

  • 绑定(bind)表达式

  • 删除“数据上下文”。绑定(bind)表达式中的字符串。

    绑定(bind)扩展的默认行为是始终转到数据上下文。 (其中包含 View 模型)
  • 数据上下文空

  • 您发布的错误消息说明的第二件事是 dataitem 为空。看来您没有分配数据上下文。在你背后的代码中的某个地方应该 - 例如 - 有类似的东西
    this.DataContext = new MyViewModel();
  • 列没有数据上下文

  • DataGridColumns 不在 VisualTree 中,因此它们不会从父 DataGrid 获取数据上下文。请记住,列没有分配元素 View 模型。它们独立于绑定(bind)到 ItemsSource 属性的项目的存在而存在。

    所以你的绑定(bind)应该是这样的:

    {绑定(bind) DataContext.FilterViewModel[MyCol].Filter,Mode=FindAncestor, AncestorType=DataGrid}

    “FilterViewModel[MyCol]”部分取决于您的 View 模型的外观。

    请注意,您需要在此处提供“DataContext”,因为绑定(bind)源将是 DataGrid,并且可以通过 DataGrid 的 DataContext 属性访问 View 模型。在这种情况下,您需要在绑定(bind)中明确给出“DataContext”。
  • 意向

  • 你的问题不是很清楚你的意图是什么。但是,如果您的意图是隐藏数据网格的某些行:这根本无法通过 ColumnVisibility 工作。 (看来您想过滤具有特定 ApporvalStatus 的行)

    关于c# - 转换器不点火,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48265107/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com