当 ToString() 具有协作对象时,为什么 WPF 数据绑定不显示文本?

2024-05-08

在一个简单的形式中,我绑定到许多不同的对象——有些放在列表框中;有些放在列表框中;有些放在列表框中。一些在文本块中。

其中一些对象具有协作对象,在这些对象上ToString()方法在执行其工作时调用——通常是某种格式化程序。

当我单步执行代码时,我发现当设置数据绑定时,

  1. ToString()叫做
  2. 协作对象不是null并返回预期结果
  3. 当在调试器中检查时,对象返回预期结果ToString()

BUT文字确实not显示在表格中。

我看到的唯一共同点是它们使用协作对象,而按预期显示的其他绑定只是通过包含对象的属性和方法工作。

如果这令人困惑,这里是代码要点:

public class ThisThingWorks
{
    private SomeObject some_object;

    public ThisThingWorks(SomeObject s) { some_object = s; }

    public override string ToString() { return some_object.name; }
}

public class ThisDoesntWork
{
    private Formatter formatter;
    private SomeObject some_object;

    public ThisDoesntWork(SomeObject o, Formatter f) 
    {
        formatter = f; 
        some_object = o;
    }

    public override string ToString()
    {
        return formatter.Format(some_object.name);
    }
}

让我再次重申——ToString() method works在所有其他上下文中 - 但是当我绑定到 WPF 中的对象并期望它显示以下结果时ToString(),我什么也没得到。

Update:

这个问题似乎是我认为的错误行为TextBlock捆绑。如果我绑定Text财产到财产DataContext被声明为接口类型,ToString()从未被调用过。如果我将属性声明更改为接口的实现,它将按预期工作。其他控件,例如Label绑定时工作正常Content财产给一个DataContext属性声明为实现或接口。

因为到目前为止,这已经从这个问题的标题和内容中删除了,所以我在这里创建了一个新问题:当绑定属性声明为接口与类类型时,WPF 绑定行为不同吗? https://stackoverflow.com/questions/2917878/why-doesnt-textblock-databinding-call-tostring-on-a-property-whose-compile-tim

更改了标题:当绑定属性声明为接口与类类型时,WPF 绑定行为不同吗? https://stackoverflow.com/questions/2917878/wpf-binding-behaviour-different-when-bound-property-is-declared-as-interface-vs-c


尝试这些简单的改变:

首先使用此版本的方法测试您的程序:

public override string ToString()
{
    return "This method's really being called."
}

如果确实在 UI 中显示了一些内容,现在尝试这个版本:

public override string ToString()
{
    Console.WriteLine(
       string.Format("some_object.name = {0}, formatter.Format(some_object.name) = {1}",
          some_object.name,
          formatter.Format(some_object.name));
    return formatter.Format(some_object.name);
}

如果这不能让您找出真正的问题所在,我会感到非常惊讶。

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

当 ToString() 具有协作对象时,为什么 WPF 数据绑定不显示文本? 的相关文章

随机推荐

  • Java 全屏模式对话框

    如何创建一个可用作内部对话框的自定义模式 JDialog 用于全屏独占模式 我有一个 JScrollPane 带有一个巨大的滚动条 里面充满了巨大的按钮 如下所示 FOO BAR BIZ
  • 从 url 加载图像并绘制到 HTML5 Canvas

    我在从 javascript 中的 url 加载图像时遇到问题 下面的代码可以工作 但我不想从 html 加载图像 我想使用纯 JavaScript 从 url 加载图像 var c document getElementById myCa
  • 致命错误:未捕获错误:调用未定义的函数curl_version() - Localhost Dev

    我正在尝试将 stripe 集成到我的 PHP 项目中 但在 localhost 上出现此错误 Fatal error Uncaught Error Call to undefined function curl version in 我正
  • 使用 PyDrive 将图像上传到 Google Drive

    我有一个关于 PyDrive 的愚蠢问题 我尝试使用 FastAPI 制作一个 REST API 它将使用 PyDrive 将图像上传到 Google Drive 这是我的代码 from fastapi import FastAPI Fil
  • 将脚本 Jquery 转换为 Javascript

    我需要将以下 jquery 脚本转换为 javascript
  • 将输入字段中的逗号替换为点

    欧洲国家在输入十进制数字时使用逗号 而不是点 所以我想在用户输入时用逗号替换点号 我知道 input number 可以做到这一点 但我需要对 IE 的支持 我想指令是最好的选择 我用下面的代码尝试了一下 但它失败了 directive r
  • 在 Restangular 中发送 GET 参数

    我在用着矩形 https github com mgonto restangular在我的项目和早期的项目中 这段代码对于检索对象数组效果很好 var params name Stack surname Overflow var servi
  • 添加零时奇怪的 numpy.sum 行为

    我了解数学上等效的算术运算如何因数值错误而导致不同的结果 例如 以不同的顺序对浮点数求和 然而 令我惊讶的是添加零sum可以改变结果 我认为无论如何 这始终适用于浮动 x 0 x 这是一个例子 我预计所有的线都恰好为零 有人可以解释为什么会
  • 关闭时不会调用 SetConsoleCtrlHandler

    我编写了一个在控制台中运行的应用程序 需要在系统关闭或用户注销之前进行快速备份 我的测试应用程序编写一个带有信号的文件 并在手动关闭控制台窗口 单击 X 时工作 但当控制台在关机或注销时关闭时 它不起作用 从我在 MSDN 上读到的内容来看
  • Flask:AttributeError:'UnboundField'对象没有属性'__call__'?

    为什么我会收到此错误 什么是 UnboundField 我需要了解什么才能在将来修复和避免此问题 当我访问时调试输出http 127 0 0 1 5000 signup http 127 0 0 1 5000 signup Attribut
  • 如何使用 R vctrs 包构建一个可以与 c() 结合的对象

    我试图了解如何用向量构建对象 我认为这很简单 但是当我在我的对象上使用 c 时遇到了麻烦 我们的对象有两个属性 x 和描述符 在本例中都是字符串 我的对象将具有不同类型的属性 我们构建了一个构造函数 new toy vector 我还没有在
  • 当一个模块安装了两个版本时 Perl 会做什么?

    我在正在使用的远程机器上没有 root 访问权限 因此我使用 cpanm 和 local lib 的组合 如下所述here https stackoverflow com a 2980715 1156644将 CPAN 模块安装到我的本地目
  • 提交表单时 ng-required 不起作用

    我在带有 required 属性的输入文本框中包含以下代码 但是当我跳出该字段或提交表单时 它不会阻止表单提交并通知用户该字段是必填字段 div class col sm 8 div
  • Node.js 子进程

    我试图弄清楚这对于 node js 子进程来说是否是一个不错的用例 我有一款多人游戏 人们可以进行 1v1 比赛 我应该为每场比赛使用子进程吗 并不是真的需要 由于节点是基于事件的 并且单个进程将能够处理数千个这样的玩家对 您将为每个这样的
  • 从什么时候起sqlite的持久日志模式成为Android中的默认日志模式?

    从什么时候起sqlite的持久日志模式成为Android中的默认日志模式 我知道Android版本4 1 1 API 16 中的日志模式已经改变 但这并不准确 因为发行说明中不包含此信息 我不知道是否可以在发行说明中找到 如果您认识的人确切
  • 使用jmeter测试多个网站

    如何使用jmeter测试100个不同的网站 来自DMOZ 我认为可以通过将jmeter与脚本集成来完成 基本上 该脚本是告诉 jmeter 从文本或 csv 文件中读取 URL 并将 http 请求采样器更改为文件中的 URL 以运行测试
  • 使用 VBA 清除 Excel 单元格格式而不清除 NumberFormat

    是否可以在不改变 的情况下清除Excel单元格格式和内容 使用VBA NumberFormat 给定的单元格 我尝试过 ClearContents ClearFormats 但 ClearFormats 删除了数字格式细胞也 请建议 你可以
  • 前置条件失败:从 iOS 13.4 开始,在 SwiftUI 中使用 GeometryReader 时输入索引无效

    昨天 我将 XCode 和我的项目升级到 iOS 13 4 我开始在使用 GeometryReaders 的视图周围看到很多失败 除了 前提条件失败 输入索引无效 之外 该错误没有显示任何内容 升级到 13 4 1 后我遇到了完全相同的问题
  • 使用 javascript onchange 下拉菜单

    我有一个简单的下拉菜单 我希望拥有它 以便如果用户选择 有一个婴儿 则消息会更改为 有一个婴儿 但对于任何其他选择 该消息保持不变 什么也没有 但这不起作用 有人可以帮忙吗 请玩我的jsfiddle http jsfiddle net Z9
  • 当 ToString() 具有协作对象时,为什么 WPF 数据绑定不显示文本?

    在一个简单的形式中 我绑定到许多不同的对象 有些放在列表框中 有些放在列表框中 有些放在列表框中 一些在文本块中 其中一些对象具有协作对象 在这些对象上ToString 方法在执行其工作时调用 通常是某种格式化程序 当我单步执行代码时 我发