如果命令绑定解析为 null,为什么按钮会启用?

2023-11-26

好的,XAML 非常简单,使用 MVVM 绑定到ICommand SomeCommand { get; }视图模型上的属性:

<Button Command="{Binding Path=SomeCommand}">Something</Button>

If SomeCommand回报null,该按钮已启用。 (与CanExecute(object param)方法上ICommand,因为没有实例可以调用该方法)

现在的问题是:为什么该按钮启用?你会如何解决这个问题?

如果你按下“启用”按钮,显然什么也没有被调用。该按钮看起来已启用,这很丑陋。


我的同事找到了一个优雅的解决方案:使用绑定后备值!

public class NullCommand : ICommand
{
    private static readonly Lazy<NullCommand> _instance = new Lazy<NullCommand>(() => new NullCommand());

    private NullCommand()
    {
    }

    public event EventHandler CanExecuteChanged;

    public static ICommand Instance
    {
        get { return _instance.Value; }
    }

    public void Execute(object parameter)
    {
        throw new InvalidOperationException("NullCommand cannot be executed");
    }

    public bool CanExecute(object parameter)
    {
        return false;
    }
}

然后 XAML 看起来像:

<Button Command="{Binding Path=SomeCommand, FallbackValue={x:Static local:NullCommand.Instance}}">Something</Button>

这个解决方案的优点是如果你打破了它会更好地工作得墨忒耳定律绑定路径中有一些点,其中每个实例可能会变成null.

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

如果命令绑定解析为 null,为什么按钮会启用? 的相关文章

  • VB.NET 相当于 C# 属性简写吗?

    是否有与 C 等效的 VB NET public string FirstName get set 我知道你能做到 Public Property name As String Get Return name ToString End Ge
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 私有模板函数

    我有一堂课 C h class C private template
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 在wpf中移动鼠标

    我目前正在寻找一种在 wpf 中移动鼠标的方法 我发现的只是我无法可靠实现的非托管方法调用 有没有一种简单的方法可以将鼠标光标移动到某个地方 即 双击后 我肯定在这里遗漏了一些东西 添加对System Windows Forms dll的引
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大

随机推荐

  • 我应该扔掉一个弦乐作家吗?或以某种方式重用?

    我会让事情变得简单 我有一个字符串编写器作为类成员 因此我不能使用 using 每次调用某个函数时我都想要一个空的软件 我应该在 sw 上调用 Dispose 并分配一个新对象吗 或者我应该做一些类似 close 的事情并做其他事情来清空缓
  • 将地址传递给数组而不是数组会导致问题吗?

    我遇到了这段代码 char str 600 scanf s str 当然 这会发出这个警告 a c 6 17 warning format specifies type char but the argument has type char
  • 在闪亮的应用程序部署中隐藏密钥

    我正在使用从 S3 获取的数据将应用程序部署到shinyapps io 并且我想确保我的 AWS 密钥是安全的 目前 在 app R 代码中 我正在设置环境变量 然后查询 S3 以获取数据 有没有办法创建一个隐藏密钥的文件并将其与我的 ap
  • 如何使用 ctypes 将 Python 列表转换为 C 数组?

    如果我有以下两组代码 如何将它们粘合在一起 void c function void ptr int i for i 0 i lt 10 i printf p ptr i return def python routine y x for
  • 对于移动应用程序来说,正确的 OAuth 2.0 流程是什么

    我正在尝试使用 OAuth 2 0 在移动应用程序的 Web API 中实现委派授权 根据规范 隐式授权流程不支持刷新令牌 这意味着一旦在特定时间段内授予访问令牌 一旦令牌过期或被撤销 用户必须再次向应用程序授予权限 我想对于在浏览器上运行
  • iOS 7 Sprite Kit 释放内存

    我正在构建一款针对新 iOS 7 和 Sprite Kit 的 iOS 游戏 使用发射器节点和物理来增强游戏玩法 在开发应用程序时 我遇到了一个严重的问题 您创建了场景 节点 效果 但是当您完成并需要返回主屏幕时 如何释放这些资源分配的所有
  • HTML5 iFrame 高度仅为 150px

    基本上我想做的是在页面顶部有一个单一的 薄的工具栏 其中有一排各种 DIV 容器用作按钮 我希望这些按钮能够更新工具栏下方 iframe 的内容 问题是我的工具栏下方的 iframe 高度只有 150px 具体来说 当我指定时会发生这种情况
  • 使用jedis如何写入redis集群中的特定槽/节点

    我正在尝试提高将数据写入redis集群的性能 我们计划从 redi sentinel 迁移到集群模式以实现可扩展性 但是 与redis sentinel相比 写操作的性能要差很多 我们在redis sentinel中利用了管道 但集群模式不
  • 在 PHP 中迭代复杂的关联数组

    有没有一种简单的方法可以在 PHP 中迭代此结构的关联数组 数组 searches有一个编号索引 包含 4 到 5 个关联部分 所以我不仅需要迭代 searches 0 通过 searches n 但是也 searches 0 part0
  • 获取有关 MATLAB com.mathworks 内部结构的帮助

    可以访问 MATLAB 的内部 java 代码位 以编程方式更改 MATLAB 本身 例如 您可以使用以下命令以编程方式在编辑器中打开文档 editorServices com mathworks mlservices MLEditorSe
  • UITableView自定义滚动条

    如何为 UITableView 创建自定义滚动条 我想删除跟踪开始时弹出并在跟踪结束时消失的默认选项 相反 我想要一个类似于计算机程序中的程序 a 它位于屏幕的右侧并且永久可见 b 手动滚动栏会将 UITableView 滚动到适当的位置
  • 禁用特定 GDI 设备上下文的抗锯齿功能

    我正在使用第三方库将图像渲染到 GDI DC 并且我需要确保渲染任何文本时都不会进行任何平滑 抗锯齿 以便我可以将图像转换为具有索引颜色的预定义调色板 我用于渲染的第三方库不支持此功能 并且仅根据当前 Windows 设置的字体渲染来渲染文
  • 如何在 Haskell 中使用策略编写并行归约?

    在高性能计算中 总和 乘积等通常使用 并行归约 来计算 该方法需要n元素并在 O logn 时间 给定足够的并行性 在 Haskell 中 我们通常使用fold对于这种计算 但评估时间始终与列表的长度呈线性关系 Data Parallel
  • 固定宽度整数类型是否保证是标准内置类型的 typedef?

    类型是否来自
  • 如何在写入后清除 PrintWriter 的内容

    晚上好 我想知道如何清除写入PrintWriter的数据 即打印后是否可以从PrintWriter中删除数据 在此 servlet 中 我将一些文本打印到响应中 并在 表示的行处 我想删除所有以前打印的数据并打印新内容 protected
  • Kivy 布局高度适应子部件的高度

    我想创建一个布局 其中有类似于 BoxLayout 的内容 以便我能够在布局中创建 行 并且在每个 行 中我想使用另一个 BoxLayout 中的某些内容来创建 列 列不需要均匀分布 例如 我想创建一个 BoxLayout 其中一列带有方形
  • 如何在codeigniter中的hmvc中的另一个模块中加载模型?

    我想在我的项目中使用模块化扩展 HMVC 如下所示 modules module01 models models01 php controllers controller01 php views views01 php module02 m
  • 我应该切换到Python吗? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我最近一直在考虑转向Python编程语言 目前 Matlab 是我所在部门用于快速开发和
  • 在 WPF C# TreeView 中获取子节点的父节点

    我知道使用 WPF 进行 C 编程与传统的 C 程序不同 因此大多数在线材料都没有说明我需要什么 我的 WPF 窗口中有一个 TreeView 控件 其中有父节点和子节点 我想将它们存储在 Node 类型的列表中 id name paren
  • 如果命令绑定解析为 null,为什么按钮会启用?

    好的 XAML 非常简单 使用 MVVM 绑定到ICommand SomeCommand get 视图模型上的属性