WPF字典绑定失败很慢

2023-12-08

我有大部分Label我的应用程序中的对象已绑定,以便可以从网络服务中替换它们。

我将替换内容存储在字典中。替换内容根据为应用程序加载的客户端而有所不同。

我遇到的问题是,大多数时候我不替换标签,并且绑定失败会引发非常慢的异常。

这是一个例子:(请注意,此代码可以正常运行,如果找不到匹配项,则速度会很慢。)

<Label Content="_Gender"
       Helpers:CaptionHelper.PropertyName="Content"
       Helpers:CaptionHelper.PropertyValue="{Binding Labels[Gender], 
                                                     FallbackValue=_Gender}"
       Target="{Binding ElementName=cbGender}" />

当绑定尝试查找 Lables[Gender] 时,我会在输出窗口中看到以下内容:

System.Windows.Data Warning: 17 : Cannot get 'Item[]' value (type 'String') from 'Labels' (type 'Dictionary`2'). BindingExpression:Path=Labels[Gender]; DataItem='MyViewMV'
      (HashCode=63776763); target element is 'Label' (Name=''); target property is 'PropertyValue'(type 'String') TargetInvocationException:'System.Reflection.TargetInvocationException: 
           Exception has been thrown by the target of an invocation. ---> System.Collections.Generic.KeyNotFoundException: 
           The given key was not present in the dictionary.
   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle._InvokeMethodFast(Params Truncated)
   at System.Reflection.RuntimeMethodInfo.Invoke(Params Truncated)
   at System.Reflection.RuntimeMethodInfo.Invoke(Params Truncated)
   at MS.Internal.Data.PropertyPathWorker.GetValue(Params Truncated)
   at MS.Internal.Data.PropertyPathWorker.RawValue(Params Truncated)'

由于我有很多这样的内容,所以大约需要一秒钟的时间才能浏览完所有这些内容。

有没有办法让绑定在字典查找失败时不抛出异常?或者以某种方式更快地失败?


如果你可以选择的话,我会改变你的IDictionary实现返回null并改为使用TargetNullValue(或者甚至是IDictionary<TKey, object>并返回DependencyProperty.UnsetValue如果你还在使用FallbackValue):

public class PassthruDictionary<TKey, TValue> : IDictionary<TKey, TValue>
{
    private Dictionary<TKey, TValue> instance;

    // ... other stuff

    public TValue this[TKey key]
    {
        get
        {
            TValue value;
            if (instance.TryGetValue(key, out value))
            {
                return value;
            }
            else
            {
                return default(TValue);
            }
        }
        // ... more
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF字典绑定失败很慢 的相关文章

  • 删除是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 C 编程 free 如何知道要释放多少 https stackoverflow com questions 1518711 c programming how does free know how m
  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • MFC:如何设置CEdit框的焦点?

    我正在开发我的第一个简单的 MFC 项目 但我正在努力解决一个问题 想要设置所有的焦点CEdit其中一个对话框中的框 我的想法是 当打开对话框时 焦点位于第一个编辑框上 然后使用 选项卡 在它们之间交换 我看到了方法SetFocus 但我无
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • .NET 4 的条件编译[重复]

    这个问题在这里已经有答案了 可能的重复 条件编译和框架目标 https stackoverflow com questions 2923210 c sharp conditional compilation and framework ta
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 如何在 winforms 应用程序的主屏幕显示之前显示欢迎屏幕?

    我想在应用程序启动时加载欢迎屏幕 然后用户单击欢迎屏幕上的按钮 然后关闭欢迎屏幕 最后显示主屏幕 static void Main startup method being called Application EnableVisualSt
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc

随机推荐

  • 从不循环的数组列表中选择对象 - ANDROID

    我正在寻找一个可以像 SQL where 命令一样从 ArrayList 中选择对象的库 我的项目中有巨大的数组列表 2000 到 20000 之间 我不想每次都编写 for while 循环 我找到了 lambdaj 它适用于 Java
  • 无法从已释放的脚本执行代码

    我有一个在不同框架中需要重写的函数 此外 我需要从我的覆盖中调用原始函数 为此 我使用以下方法 myFrame SomeFunction function var originalSomeFunction myFrame SomeFunct
  • 随机背景颜色变化

    我试图通过单击按钮将主体背景颜色更改为随机颜色
  • numpy recarrayappend_fields:无法附加日期时间的numpy数组

    我有一个包含各种字段的记录 我想在其上附加一个日期时间对象数组 然而 似乎append fields函数于numpy lib recfunctions不允许我添加对象数组 这是一些示例代码 import numpy as np import
  • .NET Color 中的 RGB 格式

    我一直在检查有关 Color 的文档 我正在编写一个 C 程序 将颜色设置为 Color 如果你看到那里 它会根据8 bitRGB 值 换句话说 我认为这是 RGB 888 格式 我猜 我在相机中使用 RGB 565 格式 5 位用于 R
  • 通过 foursquare 场地 api 在全世界搜索查询

    我从用户那里获取一个字符串 并且必须搜索它在全世界的位置 我想使用 foursquare 场地 api 但在那个端点我必须通过 ll和半径 或 sw和ne 或 近和半径 设置搜索范围 现在如何在全世界搜索字符串的位置 您可以设置intent
  • 从 Excel 导出 XML 并保留日期格式

    许多 StackOverflow 帖子和其他在线论坛都有与此类似的问题 但它们都没有真正解决我遇到的问题 我正在从 Excel 导出 XML 文件 Excel 文件包含日期 然而 在 XML 文件中 这些日期显示为整数 我相信该日期是自 1
  • 防止 jQuery html() 中的 XSS

    我使用 ajax 从数据库接收数据 然后使用 html jQuery 函数将其与 HTML 代码一起添加到网站 如下所示 ajax url getDatabaseData php type post dataType json succes
  • 在 PHP 中将字符串拆分为多个分隔符

    我可以使用逗号分割字符串preg split like words preg split string 如何使用点 空格和分号来分割字符串 附言 我在 PHP preg split 页面上找不到任何相关示例 这就是我问的原因 尝试这个
  • Laravel 5.2 上缺少 'Illuminate\Routing\ControllerServiceProvider' 类

    我已按照 Laravel 5 2 文档升级指南中的说明更新了composer json 文件并运行composer update 一切都已正确更新 但作曲家在生成自动加载文件时转储 了以下错误 Class Illuminate Routin
  • 在 gradle 文件中包含 Retrolambda 时,Retrofit 2.0 xml simplexml 转换器出现问题

    这是我的 gradle 文件 apply plugin com android application apply plugin me tatarka retrolambda android compileSdkVersion 23 bui
  • 操作数应包含 1 列 [重复]

    这个问题在这里已经有答案了 SELECT topic id FROM phpbb topics AS t WHERE t topic id IN SELECT p topic id COUNT p post id AS total post
  • 如何通过app容器-docker连接mysql容器的localhost:3306

    在我的应用程序设置中 我使用以下设置连接到数据库 spring jpa hibernate ddl auto none spring datasource driver class name com mysql jdbc Driver sp
  • 如何在CMake的execute_process中使用find -exec?

    我使用CMakeinstall DIRECTORIES 在安装时复制标题的表单 install DIRECTORIES CMAKE CURRENT SOURCE DIR DESTINATION include FILES MATCHING
  • 使用 JavaMail API 通过电子邮件发送线程消息

    如何识别该特定消息是电子邮件线程并使用 JavaMail API 检索该线程中的消息 用于电子邮件 A replies to B B replies to A A emails to B Original Message 如何获取有关该线程
  • 从照片 URL(而不是输入文件字段)将照片上传到用户个人资料

    我已经完成了许多文件上传示例 但还没有找到强制用户发布照片的方法 此示例显示用户如何从计算机上传照片 http developers facebook com blog post 498 我想使用此方法 但将 文件输入 浏览 字段替换为图像
  • 条件是否会产生每个对象有多个等待集的效果?

    我正在阅读有关条件的内容java util concurrent locks Condition 条件将对象监视器方法 wait notify 和 notifyAll 分解为不同的对象 以达到具有多个对象的效果 每个对象的等待集 通过将它们
  • 如何使用PowerShell重建Windows搜索索引?

    由于我们没有找到任何解决方案来解决不断增长的 Windows 搜索数据库 即使在 Microsoft 的帮助下 我们决定在数据库达到特定限制时通过 SCOM 定期重建数据库 这与 Windows Server 2012 R2 相关 因此我需
  • 使用plot3在MATLAB中绘制圆锥体

    我正在寻找一种在 3D 冲浪图中的特定位置绘制圆锥体的方法 圆锥体是否也可以具有 50 的透明度 现在我正在使用绘制一个基本的 3D 环境surf功能 我正在尝试使用该功能plot3在特定位置绘制特定尺寸的圆锥体 以下代码通过将圆柱体捏在
  • WPF字典绑定失败很慢

    我有大部分Label我的应用程序中的对象已绑定 以便可以从网络服务中替换它们 我将替换内容存储在字典中 替换内容根据为应用程序加载的客户端而有所不同 我遇到的问题是 大多数时候我不替换标签 并且绑定失败会引发非常慢的异常 这是一个例子 请注