WPF 数据网格 [System.Windows.Data 错误:4]

2024-01-03

我有一个 WPF 应用程序DataGrid如下所示:

数据网格(简化的):

<DataGrid x:Name="CoreServiceLogDataGrid"
Grid.Row="0"
Height="auto"
ItemsSource="{Binding Source={StaticResource CoreServiceCollection}}"
AutoGenerateColumns="False"
CanUserReorderColumns="True"
CanUserSortColumns="True"
IsReadOnly="True">

    <DataGrid.Columns>
        <DataGridTextColumn x:Name="ID"
            Header="ID"
            Binding="{Binding ID}" />

        <DataGridTextColumn Binding="{Binding Timestamp}"
            Header="Timestamp" />

    </DataGrid.Columns>

</DataGrid>

当数据加载时;我收到以下错误(多次):

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=AreRowDetailsFrozen; DataItem=null; target element is 'DataGridDetailsPresenter' (Name=''); target property is 'SelectiveScrollingOrientation' (type 'SelectiveScrollingOrientation')
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpression:Path=HeadersVisibility; DataItem=null; target element is 'DataGridRowHeader' (Name=''); target property is 'Visibility' (type 'Visibility')

我不知道为什么会发生这种情况以及如何解决这个问题。

编辑:(有关 CoreServiceLogViewCollection 的信息)

CoreServiceCollection 只是一个 ListCollectionView。

  public static ListCollectionView CoreServiceLogViewCollection {
        get {
            if (_coreServiceCollection == null) {
                _coreServiceCollection =
                    new ListCollectionView(LogSession.CoreServiceLogCollection);
            }

            return _coreServiceCollection;
        }
    }

参数只是一个ObservableCollection含有ID,Timestamp和其他属性

编辑2: 实例化在App.xaml中完成:

   <ResourceDictionary>
       <x:Static Member="vm2:CoreServiceLogView.CoreServiceLogViewCollection"
                          x:Key="CoreServiceCollection" />
   </ResourceDictionary>

编辑 3(风格...)

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                mc:Ignorable="d">


<!-- #columnHeaderDGStyle -->


<!-- Datagrid -->
<Style x:Key="Log4NetDataGridStyle"
       TargetType="DataGrid">

    <Setter Property="ColumnHeaderStyle"
            Value="{DynamicResource DatagridColumnHeaderCustomTemplateStyle}" />


    <Setter Property="RowStyle"
            Value="{DynamicResource Log4NetRowStyle}" />

    <Setter Property="RowDetailsTemplate"
            Value="{DynamicResource RowDetailsTemplate}" />

    <Setter Property="MaxHeight"
            Value="1600">
    </Setter>
    <Setter Property="MaxWidth"
            Value="2560">
    </Setter>


</Style>


<Style x:Key="DataCommuGridStyle"
       TargetType="DataGrid">

    <Setter Property="ColumnHeaderStyle"
            Value="{DynamicResource DatagridColumnHeaderCustomTemplateStyle}" />


    <Setter Property="RowStyle"
            Value="{DynamicResource CommuRowStyle}" />

    <Setter Property="RowDetailsTemplate"
            Value="{DynamicResource RowDetailsTemplate}" />

    <Setter Property="MaxHeight"
            Value="1600">
    </Setter>
    <Setter Property="MaxWidth"
            Value="2560">
    </Setter>


</Style>


<!-- ************************* Row Style ************************* -->
<Style x:Key="Log4NetRowStyle"
       TargetType="DataGridRow">

    <Setter Property="FontSize"
            Value="14" />

    <Setter Property="Background"
            Value="{Binding Path=LogColour.ColorName}" />

    <Setter Property="Height"
            Value="Auto">
    </Setter>

    <Style.Triggers>
        <DataTrigger></DataTrigger>
    </Style.Triggers>

</Style>

<Style x:Key="CommuRowStyle"
       TargetType="DataGridRow">

    <Setter Property="FontSize"
            Value="14" />

    <Setter Property="Background"
            Value="Azure" />

    <Setter Property="Height"
            Value="Auto">
    </Setter>

    <Style.Triggers>
        <DataTrigger></DataTrigger>
    </Style.Triggers>

</Style>


<DataTemplate x:Key="RowDetailsTemplate">
    <Border BorderThickness="0"
            Padding="5" >


        <Border.Background>
            <LinearGradientBrush StartPoint="0,0"
                                 EndPoint="0,1" Opacity="0.2">
                <GradientStop Color="White"
                              Offset="0" />
                <GradientStop Color="Black"
                              Offset="1" />
            </LinearGradientBrush>

        </Border.Background>


        <!-- alternative with Expancer -->
        <Expander IsExpanded="True"
                  HorizontalAlignment="Left"
                  BorderThickness="1,1,1,5"
                  MaxHeight="300"
                  MaxWidth="900">

            <Expander.Header>
                <DockPanel>
                    <TextBlock FontSize="12"
                               Text="LoggingMessage: "
                               VerticalAlignment="Center" />
                </DockPanel>
            </Expander.Header>

            <Expander.Content>
                <ScrollViewer VerticalScrollBarVisibility="Auto"
                              HorizontalScrollBarVisibility="Auto"
                              CanContentScroll="True"
                              Style="{StaticResource LeftScrollViewer}">
                    <StackPanel Orientation="Vertical">

                        <TextBox FontSize="16"
                                 BorderThickness="0"
                                 IsReadOnly="True"
                                 Background="Transparent"
                                 Foreground="Black"
                                 TextWrapping="Wrap"
                                 Text="{Binding LoggingMessage, Mode=OneWay}" />
                    </StackPanel>
                </ScrollViewer>
            </Expander.Content>
        </Expander>


    </Border>


</DataTemplate>


<Style x:Key="GroupHeaderStyle"
       TargetType="{x:Type GroupItem}">
    <Setter Property="Margin"
            Value="0,0,0,5" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupItem}">
                <Expander IsExpanded="False"
                          Background="#FF112255"
                          BorderBrush="#FF002255"
                          Foreground="Black"
                          BorderThickness="1,1,1,5">
                    <Expander.Header>
                        <DockPanel>
                            <TextBlock FontWeight="Bold"
                                       Foreground="White"
                                       Text="{Binding Path=Name}"
                                       Margin="5,0,0,0"
                                       Width="100" />
                            <TextBlock FontWeight="Bold"
                                       Foreground="White"
                                       Text="{Binding Path=ItemCount}" />
                        </DockPanel>
                    </Expander.Header>

                    <Expander.Content>
                        <ItemsPresenter />
                    </Expander.Content>
                </Expander>


            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


<!-- ******************** DataTemplate ******************** -->


</ResourceDictionary>

我不久前写过一个答案如何读取WPF绑定错误 https://stackoverflow.com/questions/14510931/is-there-a-way-to-determine-where-is-a-wpf-binding-declared-created/14523290#14523290。基本上,分解分号上的错误并开始从下向上阅读它,它应该让您知道绑定错误在哪里:

  • System.Windows.Data Error: 4 :
    • 无法找到引用“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.DataGrid',AncestorLevel='1”的绑定源。 BindingExpression:Path=AreRowDetailsFrozen;
  • 数据项=空;
  • 目标元素是“DataGridDetailsPresenter”(名称=“”);
  • 目标属性是“SelectiveScrollingOrientation”(类型“SelectiveScrollingOrientation”)

and

  • System.Windows.Data Error: 4 :
    • 无法找到引用“RelativeSource FindAncestor,AncestorType='System.Windows.Controls.DataGrid',AncestorLevel='1”的绑定源。 BindingExpression:Path=HeadersVisibility;
  • 数据项=空;
  • 目标元素是“DataGridRowHeader”(名称=“”);
  • 目标属性是“可见性”(类型“可见性”)

从下往上读,第一个错误告诉你

  • 包含导致错误的绑定的属性是SelectiveScrollingOrientation
  • 包含有问题的属性的 UI 对象是DataGridDetailsPresenter,没有指定名称
  • the DataContextUI对象后面是null
  • 绑定试图找到一个RelativeSource类型的DataGrid所以它可以绑定到AreRowDetailsFrozen财产,并且未能找到RelativeSource

因此,请检查您的代码是否有类似以下内容的内容:

<DataGridDetailsPresenter SelectiveScrollingOrientation="{Binding 
    Path=AreRowDetailsFrozen, 
    RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}" />

第二个错误告诉你

  • 包含导致错误的绑定的属性是Visibility
  • 包含有问题的属性的 UI 对象是DataGridRowHeader,没有指定名称
  • the DataContextUI对象后面是null
  • 绑定试图找到一个RelativeSource类型的DataGrid所以它可以绑定到HeadersVisibility财产,并且未能找到RelativeSource

因此,请检查您的代码是否有类似以下内容的内容:

<DataGridRowHeader Visibility="{Binding 
    Path=HeadersVisibility, 
    RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}" />

根据您发布的代码,第一个可能在您的LeftScrollViewer某处的风格,第二个可能在你的DatagridColumnHeaderCustomTemplateStyle

如果您在 XAML 中发现错误时遇到问题,可以尝试运行应用程序并使用类似工具检查它Snoop http://snoopwpf.codeplex.com/这将让您在运行时查看 WPF 应用程序的 VisualTree,并且您应该能够在那里找到确切的绑定错误,以便您可以将其追溯到 XAML 中的源

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 数据网格 [System.Windows.Data 错误:4] 的相关文章

  • 如何使 Window.Current 关闭后可见?

    我有一个可以打开新窗口的应用程序 如果原始窗口关闭 然后用户启动应用程序 例如从开始菜单 TryShowAsStandaloneAsync无法打开新窗口 为什么 所以我想 复活 原来的那个 但虽然我用Window Current Activ
  • 如何获取列表框中项目的索引?

    我正在将项目添加到ListBox像这样 myListBox Items addRange myObjectArray 我还想通过以下方式选择我添加的一些项目 foreach MyObject m in otherListOfMyObject
  • 在 Silverlight 中同步操作

    我有一个 Silverlight 应用程序 它使用操作从模型获取数据 再次从 WCF 服务获取数据 我需要以某种方式同步两个 ActionCallback 或等待它们 然后执行一些代码 Example model GetMyTypeList
  • 将 python 字典翻译为 C++

    我有包含以下代码的 python 代码 d d 0 0 0 d 1 2 1 d 2 1 2 d 2 3 3 d 3 2 4 for i j in d print d i j d j i 不幸的是 对于我的目的来说 循环遍历 python 中
  • 从列表中获取数组而不进行堆分配

    我有一个列表 我想将其数组分配给一个属性 public void BuildMesh List
  • 如何将多种语言设置放入单个 .clang-format 文件中

    我想为 java javascript 和 c 创建一个 clang 格式 我知道如何转储单一语言的示例配置 但不知道如何合并这 3 个配置文件 有关如何将多种语言配置放入单个文件中的示例 BasedOnStyle LLVM IndentW
  • 将二进制文件内容读取到 std::string 的最佳方法是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将 istream 与字符串一起使用 https stackoverflow com questions 6510923 how to use istream with strings std i
  • 在 C# 中将 Exe 文件作为嵌入式资源运行

    我有一个第 3 方 EXE 我只需要从我的 C 应用程序运行它 我的主要目标是对我的 C 文件中的第 3 方可执行文件进行版权保护 有没有更好的方法来做到这一点 我怎样才能做到这一点 首先将嵌入的可执行文件作为资源文件添加到您现有的资源文件
  • Tulpep PopupNotifier 无法与计时器一起使用

    using System using System Data SQLite using System Drawing using System Timers using System Windows Forms using Tulpep N
  • std::function 中参数的自动动态转换

    我们有多态类 A 和 B 例如 struct A virtual A struct B final public A void f std cout lt lt f lt lt std endl 我想分配一个变量std function
  • 如何在类中使用常量类变量声明常量数组?

    如何在类中使用常量类变量声明常量数组 是否可以 我不想要动态数组 我的意思是这样的 class test const int size int array size public test size 50 int main test t 5
  • 底层连接已关闭:接收时发生意外错误

    我来这里是因为我在通过 ftp 协议下载一些文件时遇到问题 这很奇怪 因为它偶尔会发生 甚至对于同一个文件也是如此 只是一个精确度 我正在下载非常大的文件 从 500 Mo 到 30Go 以下是我的函数返回的异常类型 抱歉 这是法语 Sys
  • WebProxy 错误:需要代理身份验证

    我使用以下代码从互联网获取html数据 WebProxy p new WebProxy localproxyIP 8080 true p Credentials new NetworkCredential domain user passw
  • 使用日期时间作为文件名并随后解析文件名?

    我正在将文件写入硬盘 文件名是这样构建的 String Format 0 yyyy MM dd hh mm ss txt DateTime Now 例如 文件名是 2010 09 20 09 47 04 txt 现在我想在下拉列表中显示这些
  • 检查SQL Server数据库表中是否存在表或列

    在 SQL Server 数据库中创建列或表之前 我想检查所需的表和 或列是否存在 我已经四处搜寻 到目前为止发现了两种方法 我不想使用存储过程 通过使用SqlCommand ExecuteScalar 方法并捕获异常来确定表 列是否存在
  • 在异步方法中显示错误消息的更好方法

    事实上我们不能使用await关键字在catch块使得在 WinRT 中显示来自异步方法的错误消息变得非常尴尬 因为MessageDialogAPI 是异步的 理想情况下我希望能够这样写 private async Task DoSometh
  • 单击 GridView 查找选定行

    我正在尝试获取 GridView 并从单击的行中获取数据 我已经尝试了下面的代码 当我单击该行时 我会返回选定的索引 但是当我查看 GridView 中的实际行时 它们显示为空 不知道我错过了什么 ASP 使我的网格
  • Outlook 插件:从选定的日历中获取元素

    我正在创建 Outlook 加载项 我想知道如何从选定的日历中获取元素 例如 我需要从名为 myCalendar 的日历中获取所有约会项目 现在 我可以从所有日历中获取所有约会项目 谢谢你 这些额外的日历作为主日历文件夹的子文件夹提供 所以
  • 在 '*' 标记之前编译“错误:预期 ')' 时出现多个相同错误

    我正在尝试用 C 语言编程 当我使用以下参数进行编译时 gcc D BSD SOURCE Wall ansi pedantic g tokenizer c FileOccur c WordList c wordstat c indexer
  • 用 C# 解析和查询 SOAP

    我正在尝试解析一个大量命名空间的 SOAP 消息 源也可以在here http tinyurl com n3av6k

随机推荐

  • 动态调整 iframe 的高度

    我有一个 iframe 其中包含网站的一些内容 我希望 iframe 调整为 src 内容高度的 100 有点 js 菜鸟 这就是我正在处理的内容
  • 整个应用程序的浮动视图

    我需要对我的所有应用程序有一个浮动视图 我可以使用 Window service 但我不需要我的视图位于应用程序之外 仅在我的应用程序内 我也不希望用户看到 在其他应用程序上绘图 权限 我还能怎样做呢 我不得不做类似的事情 就我而言 我希望
  • 如何检查 Postgres 中是否存在 json 键?

    假设我有一个如下所示的 json some json key a nested key a key b nested key b 注意key a and key b是映射到字典的可选键 可能存在也可能不存在 我有一个函数可以检查外键是否存在
  • 如何使用Homebrew的Ruby包而不是MacOS自带的Ruby包?

    如何从使用 MacOS 附带的 Ruby 版本切换到使用 Homebrew 下载的最新版本的 Ruby 我的 MacOS 版本似乎有ruby 2 3 7p456 2018 03 28 revision 63024 universal x86
  • 在两行以上使用上标时修复图例标题 - R ggplot2

    我正在绘制我的研究区域的地图 但在编辑图例标题时遇到问题 我需要它是 预计 40 年休耕期的水果生产率 水果 ha 1 用四行写成 我可以使用 bquote 将 1 绘制为上标 但它创建了一个我无法提供的额外空间想办法把它去掉 只有当标题被
  • DispatchQueue 同步并发

    好吧 我已经经历了大量的问题和答案 并且我知道对其的理解 但是当我尝试一些代码时 我得到的结果并不支持这些理论 到目前为止我所理解的 同步 一旦块内的所有任务都被执行 控制就会返回 异步 控制将在块被击中后立即返回 这是看起来不错的部分 现
  • Node.js 和 AngularJS 中的 CORS

    我的应用程序存在 CORS 问题 我的堆栈是 Node js快车4 http expressjs com 和 AngularJS 使用矩形 https github com mgonto restangular 我已经尝试过一些事情 例如
  • Java EE 应用服务器 Hello World

    我对独立 Java 应用程序开发相当满意 但很快就会使用 Java EE 应用程序服务器开发一个项目 有谁知道让 hello world 类型的应用程序在应用程序服务器中工作的简单操作教程 我 也许天真地 假设不同框架之间的总体方法是相似的
  • 如何使用 javascript 或 jquery 使图像或按钮在鼠标悬停时发光?

    我想在将鼠标悬停在按钮或图像上时添加发光效果 如何使用 javascript jquery 或 CSS 执行此操作 这是我希望它看起来的示例http www flashuser net flash menus tutorial flash
  • SimpleXML 不断返回 CDATA 元素上的内容

    这是另一个 CDATA 返回内容的问题 我看过很多答案 但即使我尝试了所有答案 我仍然只得到内容 更详细地说 我有一个 xml 文件 里面包含许多 NewsItem
  • 使用 C# 表单应用程序静默安装 SQL Server

    我有一个用 C 开发的 Windows 应用程序 我需要将其安装在仅安装操作系统和 Net Framework 的 PC 上 现在我必须提供一个选项 以便使用此 Windows 应用程序在该 PC 上安装 SQL Server 2008 R
  • 如何在.NET / Sql Server 中在用户当地时间发送电子邮件?

    我正在编写一个程序 需要每小时整点发送一封电子邮件 但时间是用户本地的 假设我有 2 个位于不同时区的用户 约翰在纽约 弗雷德在洛杉矶 服务器在芝加哥 如果我想在本地下午 6 点向每个用户发送电子邮件 我必须在服务器时间下午 7 点向 Jo
  • OKhttp:SSLProtocolException:SSL 握手终止

    我试图找出为什么有时会出现此错误 javax net ssl SSLProtocolException SSL 握手终止 ssl 0x60d46c90 SSL 库失败 通常是协议错误 错误 1409443E SSL 例程 SSL3 READ
  • 如何在Python中计算一周的第一个日期和最后一个日期

    我需要用 python 计算一周的日期 我需要这个 year 2012 week 23 a b func year week print a print b gt gt gt 2012 04 06 gt gt gt 2012 06 10 你
  • Docker-compose 与 nginx 反向、一个网站和一个 Restful api?

    我希望你能帮助我解决我的问题 这是信息 情况 我目前有两个工作容器 需要在同一个端口 80 上运行 有一个网站 目前只需转到服务器的主机 url 即可访问该网站 还有 Restful api 然而 它必须通过端口 80 来工作 并且登录向
  • 复制方法 IMP 以进行多个方法混合

    我设置了一个类 理想情况下将读取传入的任何类的方法 然后在运行时将它们全部映射到单个选择器 然后将它们转发到原始选择器 这现在确实有效 但我一次只能使用一种方法 问题似乎是 一旦我调整第一个方法 我用于捕获和转发该方法的 IMP 现在已与其
  • C# .ToString("X4") 在 Java 中等效

    在将 String 转换为 Unicode 时 我正在寻找一个真正相当于 Java 中的 C ToString X4 C Code char stringChars Notices ToCharArray List
  • 如何在log4j.xml中设置CATALINA_HOME?

    我需要这样的东西 参数名称 文件 值 CATALINA HOME logs log4j log 我看到很多类似的问题 但没有有效的解决方案 适用于 Tomcat 6 0 或更高版本catalina base 而不是catalina home
  • C# 查询 XML 文档

    再会 我正在尝试查询 XML 文档并有以下查询 XElement root XElement Load Data xml var entries root Descendants Where x gt x Name LocalName En
  • WPF 数据网格 [System.Windows.Data 错误:4]

    我有一个 WPF 应用程序DataGrid如下所示 数据网格 简化的