顺序评估依赖属性绑定?

2024-02-21

什么决定了同一控件上的多个 DepdencyProperties 的求值顺序?

我正在使用扩展 WPF 工具包 http://wpftoolkit.codeplex.com/PropertyGrid 并绑定了 SelectedObject 和 PropertyDefinitions:

<extToolkit:PropertyGrid AutoGenerateProperties="False" SelectedObject="{Binding ActiveDataPoint}" PropertyDefinitions="{Binding ActiveDataPoint.Properties}">

问题是 OnSelectedObjectChanged 从依赖项属性触发,并且在该更改的处理程序中它引用 PropertyDefinitions,它将其视为 null。如果我注释掉 OnSelectedObjectChanged 处理程序,那么我可以在调试时看到 OnPropertyDefinitionsChanged 在调用 OnSelectedObjectChanged 之后被调用。

public static readonly DependencyProperty PropertyDefinitionsProperty = DependencyProperty.Register( "PropertyDefinitions", typeof( PropertyDefinitionCollection ), typeof( PropertyGrid ), new UIPropertyMetadata( null, OnPropertyDefinitionsChanged ) );
public PropertyDefinitionCollection PropertyDefinitions
{
  get
  {
    return ( PropertyDefinitionCollection )GetValue( PropertyDefinitionsProperty );
  }
  set
  {
    SetValue( PropertyDefinitionsProperty, value );
  }
}

private static void OnPropertyDefinitionsChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
    Console.Write("I changed!");
}

public static readonly DependencyProperty SelectedObjectProperty = DependencyProperty.Register( "SelectedObject", typeof( object ), typeof( PropertyGrid ), new UIPropertyMetadata( null, OnSelectedObjectChanged ) );
public object SelectedObject
{
  get
  {
    return ( object )GetValue( SelectedObjectProperty );
  }
  set
  {
    SetValue( SelectedObjectProperty, value );
  }
}

private static void OnSelectedObjectChanged( DependencyObject o, DependencyPropertyChangedEventArgs e )
{
  PropertyGrid propertyInspector = o as PropertyGrid;
  if( propertyInspector != null )
    propertyInspector.OnSelectedObjectChanged( ( object )e.OldValue, ( object )e.NewValue );
}

我面临的问题已讨论这个论坛主题 http://wpftoolkit.codeplex.com/discussions/287500,但我问一个更一般的 WPF 问题,即如何更改这些属性的更新顺序。

我尝试以不同的顺序多次调用 NotifyPropertyChanged,但这似乎并没有影响这一点。我是否可以导致顺序不同,或者我应该修改 PropertyGrid 以便它适用于任一顺序?


再举一个反例来证实已经说过的话

...永远不要依赖所应用的属性的顺序

在一个定制的UserControl与定义的DependencyProperty-ies(.NET 4.5等)-因为PropertyChangedCallbacks在初始化时被调用...

实际顺序由“定义背后的代码”(静态字段)的顺序确定

...我猜这与注册顺序有关。

在其他一些情况下,顺序取决于属性在 XAML 中的排列方式。

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

顺序评估依赖属性绑定? 的相关文章

  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • C# 正则表达式用于查找 中具有特定结尾的链接

    我需要一个正则表达式模式来查找字符串 带有 HTML 代码 中的链接 以获取文件结尾如 gif 或 png 的链接 示例字符串 a href site com folder picture png target blank picture
  • 获取尚未实例化的类的函数句柄

    我对 C 相当陌生 我想做的事情可能看起来很复杂 首先 我想获取一些函数的句柄以便稍后执行它们 我知道我可以通过以下方式实现这一目标 List
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • C# 委托责任链

    为了我的理解目的 我实现了责任链模式 Abstract Base Type public abstract class CustomerServiceDesk protected CustomerServiceDesk nextHandle
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • tabcontrol selectedindex 更改事件未被触发 C#

    嘿伙计们 我有一个很小的问题 请参阅下面的代码 this is main load private void Form1 Load object sender EventArgs e tabAddRemoveOperator Selecte
  • asp.net网格分页的SQL查询

    我在用iBatis and SQLServer 使用偏移量和限制进行分页查询的最佳方法是什么 也许我添加该列ROW NUMBER OVER ORDER BY Id AS RowNum 但这只会阻止简单查询的数据访问 在某些情况下 我使用选择
  • 在 wpf 中隐藏或禁用输入手势文本

    假设我们使用 Ctrl S 输入手势来保存项目 在 文件 菜单 保存 Ctrl S 中显示这样的文本 现在 在 SaveCommand 的 canexecute 上 我检查项目是否需要保存 如果不需要 则禁用 保存 在这种情况下 我会看到类
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar

随机推荐

  • 如何将图标添加到我的存储库?

    我发现 Gitlab 和 SourceTree 支持每个存储库的图标 这使得它们更加具体且易于一眼找到 这怎么可能 作为开发人员 我们有时需要进行更改以使我们的工具看起来有所不同 你可以添加一个小的 我更喜欢96px x 96px logo
  • 有什么跨平台方法可以从标头构建 cpp 骨架吗? [复制]

    这个问题在这里已经有答案了 我厌倦了将标头复制粘贴到我的 cpp 文件中 然后对其进行修改 直到其格式正确 有没有人编写过一个程序来读取头文件并制作相应的cpp框架 我需要一些跨平台的东西或者至少可以在 Linux 上运行的东西 vim 插
  • 使用全名搜索时,Gem Ransack 不会返回任何结果

    我正在使用 Ransack 和 Rails 3 我的看法 p class button p 我的架构 create table users force gt true do t t string first name
  • 从 SQL Server 中的表中选择 XML

    我的表中存储有 XML 该表具有 int 类型的列 id 和 XML 类型的值 我正在使用 SQL Server 2012 XML 看起来像这样
  • IPython %timeit 魔法的 -n 和 -r 参数

    我想使用以下方法对代码块进行计时timeitJupyter 笔记本中的魔法命令 根据文档 timeit需要几个参数 其中两个特别控制循环次数和重复次数 我不清楚这两个论点之间的区别 例如 import numpy N 1000000 v n
  • 如何检查列表中的任何单词是否包含部分字符串?

    var list alist Contains somestring 这匹配整个字符串 如何查看列表中的任何单词是否具有匹配 somestring 的子字符串 您可以使用可枚举 任意 http msdn microsoft com en u
  • gitosis 在哪里存储工作副本?

    我想知道 gitosis 在哪里存储我的存储库的工作副本 我可以通过 gitweb 界面看到文件树 但在 srv gitosis repositories testrepo 中找不到任何工作副本 我还能够推送和克隆到存储库 但是 在不知道工
  • 是否可以在 Delphi 可执行应用程序中嵌入并运行 exe 文件?

    资源文件 RES 接受任何类型的二进制文件 但如果它是 exe 文件 我该如何运行它 您必须将其作为文件提取到磁盘并执行它 尽管您不必将其提取到磁盘 正如 Cosmin Prund 在评论中所说 但如果您不这样做 则需要大量的艰苦工作
  • 如何构造一个不区分大小写的枚举?

    我有一个简单的 Python 2 7 枚举 from enum import Enum class Label enum RedApple 1 GreenApple 2 我希望能够使用不区分大小写的键创建枚举对象 fruitname red
  • 如何将命令行参数转换为 int?

    我需要获取一个参数并将其转换为 int 到目前为止 这是我的代码 include
  • R:从字符串定义函数

    我想定义一个函数f来自参数和表达式character从 a 读取的字符串 csv文件 这个功能f有以下表达式 f function parameters expression 其中参数是 n 个参数的列表 表达式是这些参数的函数 例如 参数
  • argv[0] 可以包含空字符串吗?

    在任何 C 程序中 命令行参数argv 0 指向用于调用程序的名称 有没有什么情况会指向空字符串 这种情况的示例代码片段将是一个很好的参考 它是实现定义的 5 1 2 2 1 删节 如果值argc大于零 数组成员argv 0 通过argv
  • 用于构建小型公司演示网站的简单 CMS

    我正在寻找一个免费 简单且高效的 CMS 来为一家小公司构建网站 先决条件是 该网站只不过是一个演示文稿 包含信息丰富的内容和画廊 该网站应该包含一个具有 js ajax 风格的漂亮画廊 目前没有更多计划 但如果 CMS 能够提供一些更通用
  • 防止在 DateTime 值反序列化时进行时区转换

    我有一个使用序列化 反序列化的类XmlSerializer 这个类包含一个DateTime field 当序列化时 DateTime字段由包含 GMT 偏移量的字符串表示 例如2010 05 05T09 13 45 05 00 反序列化时
  • OWIN OAuthAuthorizationServerProvider 中的 context.Request.User 为 null

    我正在尝试使用 OWIN 为本地 Intranet 上的 Web API v2 端点实现 OAuth 该 API 使用内置 Windows 身份验证托管在 IIS 中 简而言之 这就是我想要发生的事情 当我在 token 索要我的令牌时 将
  • Ruby 中类名前有双冒号?

    我在 Rails 中看到很多在类名之前使用双冒号的情况 例如 require File expand path config environment FILE 我知道什么Module Class Constant意思是 但是 Class 这
  • 使用 Jquery 获取当前 URL

    我对 javascript 和 jquery 很陌生 getJSON idcheck php callback url i want full url to be print function json alert json message
  • 我收到警告:控制到达非 void 函数的末尾

    我的程序似乎在 Visual Studio 中运行良好 但是当我在 GCC 中运行它时 它给了我一个编译错误 称为 Book cpp In member function sdds Book sdds Book addChapter con
  • WAS 7 的异常 java.util.zip.ZipFile.ensureOpenOrZipException

    当我部署应用程序时WebSphere Application Server 7 0 我遇到了异常 并且部署花费了太多时间 经过几次部署后 服务器开始生成堆转储并耗尽内存 在我们的应用程序中我们使用JAX WS用于生成 Web 服务客户端 我
  • 顺序评估依赖属性绑定?

    什么决定了同一控件上的多个 DepdencyProperties 的求值顺序 我正在使用扩展 WPF 工具包 http wpftoolkit codeplex com PropertyGrid 并绑定了 SelectedObject 和 P