监控所有验证事件

2024-04-20

It's quite easy https://stackoverflow.com/a/565560/1997232 to check if certain container or its children have validation errors. This can be used to disable Save button.

我可以使用计时器

public SomeUserControl()
{
    InitializeComponent();
    var timer = new DispatcherTimer
    {
        Interval = TimeSpan.FromMilliseconds(100),
        IsEnabled = true
    };
    Loaded += (s, e) => buttonSave.IsEnabled = IsValid(grid);
    Unloaded += (s, e) => timer.Stop();
}

轮询和禁用按钮。

<!-- container with lots of controls, bindings and validations -->
<Grid x:Name="grid">
   ...
</Grid>

<!-- save button -->
<Button x:Name="buttonSave" ... />

有没有更好的办法?理想情况下,我想要一个活动。不幸的是我发现的唯一事件,验证错误 https://learn.microsoft.com/en-us/dotnet/api/system.windows.controls.validation.error事件,只能在具有绑定本身的元素上使用。浏览儿童元素并订阅(更不用说我必须处理添加新儿童的问题)感觉比投票更糟糕。

想法?


我通常处理这个问题的方式如下所示:

https://social.technet.microsoft.com/wiki/contents/articles/28597.aspx https://social.technet.microsoft.com/wiki/contents/articles/28597.aspx

错误事件将冒泡到容器中,您可以处理它,使用行为或命令将其传递到视图模型。

Like:

<ControlTemplate x:Key="AddingTriggers" TargetType="ContentControl">
    <ControlTemplate.Resources>
        <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource ErrorToolTip}">
            <Setter Property="HorizontalAlignment" Value="Left"/>
        </Style>

    </ControlTemplate.Resources>
    <StackPanel>
        <i:Interaction.Triggers>
            <local:RoutedEventTrigger RoutedEvent="{x:Static Validation.ErrorEvent}">
                <e2c:EventToCommand   Command="{Binding ConversionErrorCommand, Mode=OneWay}"
                                        EventArgsConverter="{StaticResource BindingErrorEventArgsConverter}"
                                        PassEventArgsToCommand="True" />
            </local:RoutedEventTrigger>
        </i:Interaction.Triggers>
        <TextBlock Text="This would be some sort of a common header" Foreground="LightBlue" HorizontalAlignment="Right"/>
        <ContentPresenter/> <!-- This is how you can have variable content "within" the control -->
        <TextBlock Text="This would some sort of a common footer" Foreground="LightBlue"  HorizontalAlignment="Right"/>
    </StackPanel>
</ControlTemplate>

任何绑定都需要 NotifyOnValidationError=True。

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

监控所有验证事件 的相关文章

  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • WPF 绑定 CompositeCollection 中的 MenuItem 不起作用

    我在将命令绑定到复合集合中的菜单项时遇到问题 这MenuItem是其一部分ContextMenu这是定义在UserControl Resources 问题是新标签的绑定不起作用 当我将 MenuItem 放置在复合集合之外时 它将起作用 有
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 用于验证目的的动态查找方法

    我正在使用 Ruby on Rails 3 0 7 我想在运行时查找一些记录以进行验证 但为该查找方法传递 设置一个值 也就是说 在我的班级中 我有以下内容 class Group lt lt ActiveRecord Base valid

随机推荐

  • iOS:在导航栏下方添加固定图像

    感觉这应该相当简单 但到目前为止我尝试过的都没有成功 简而言之 我想在我以编程方式创建的 UITableViewController 中的导航栏下方添加一个固定图像 换句话说 我希望图像保持在导航栏的正下方 即使用户在表视图中上下滚动 它基
  • RNGCryptoServiceProvider 已过时

    我需要使用随机数字和字母生成令牌 但是 错误消息告诉我使用 RandomNumberGenerator 它只会给我随机数 这没有帮助 错误信息 RNGCryptoServiceProvider 已过时 RNGCryptoServicePro
  • Scrapy 阿拉伯字母返回一些奇怪的东西

    我在用scrapy关于阿拉伯字母和英文字母 英文字母完美地工作 然而 阿拉伯字母显示如下 gs300 2006 u0644 u0643 u0632 u0633 u062c u064a 有什么帮助吗 我正在使用 python 和 scrapy
  • 如何编写一个程序来通过 Android 设备安装和卸载应用程序?

    我想编写一个程序 可以通过 Android 设备安装和卸载应用程序 由于这些功能是通过 Android 设备提供的 但是我应该从哪里开始以及需要查看哪些文件来开发我自己的应用程序 请帮帮我 提前致谢 Praween 对于这样的安装代码 In
  • 使用委托调用构造函数

    I found this http blogs msdn com haibo luo archive 2005 11 17 494009 aspx但尝试使用它但失败了 如何使用反射创建对象并通过将其放入委托中来使其快速 DynamicMet
  • 多租户主键的最佳方法

    我有一个被多个客户使用的数据库 我真的不希望代理增量键值在客户端之间流动 我希望编号从 1 开始并针对特定客户 我将使用由两部分组成的复合键tenant id以及增量 id 为每个租户创建增量密钥的最佳方法是什么 我正在使用 SQL Ser
  • Android 滚动视图不会一直向下滚动

    我查看了很多问题 但列出的解决方案都没有解决我的问题 Scrollview 不会滚动到底部边缘 https stackoverflow com questions 17124680 scrollview doesnt scroll to t
  • 获取 mysql 的最后插入 ID 如何与事务一起使用? + 交易问题

    一个由两部分组成的问题 在我的 CodeIgniter 脚本中 我启动一个事务 然后插入一行 将 insert id 设置为 php 变量 使用新 ID 作为外键将更多行插入到另一个表中 然后提交所有内容 所以我的问题是 如果在结束事务之前
  • 如何打印列表的值?

    我有一个Python问题 假设给你一个向量 x 包含大部分为零的实值 例如 x 0 0 0 87 0 0 0 0 0 0 0 32 0 46 0 0 0 0 0 10 0 0 0 0 完成功能 compress vector x 这样就返回
  • 如何将替换正则表达式作为命令行参数传递给 perl 脚本

    我正在尝试编写一个简单的 perl 脚本 以将给定的正则表达式应用于文件名等 但我在将正则表达式作为参数传递到脚本中时遇到问题 我希望能够做的是这样的 gt myscript s hi bye i hi h bye h gt 我已经生成了这
  • 警告: PDO::__construct(): [2002] 中没有这样的文件或目录(尝试通过 unix:///tmp/mysql.sock 连接)

    我的代码昨天工作得很好 今天它突然不想连接到我的数据库 我没有更改它或代码上的任何设置 也没有更新任何软件 我所做的就是这样 new PDO mysql host localhost port 3306 dbname test userna
  • 检查互联网连接的 Android 服务?

    我想创建一个 Android 服务 每当断开连接以及互联网再次重新连接时 它都会通知主要活动 我有以下功能来检查互联网连接 private boolean haveInternet NetworkInfo info NetworkInfo
  • 作为文字类型无效?

    在 C 14 中void是文字类型 如果某个类型满足以下条件 则该类型是文字类型 空白 或者 标量类型 或者 参考类型 或者 文字类型的数组 或者 具有以下所有属性的类类型 第 9 条 它有一个简单的析构函数 它是一种聚合类型 8 5 1
  • 日期时间在转换时出错

    我有这种甲酸盐的字符串 19 8 1988 note String DateOfBirth 19 8 1988 当我使用Datetime parse DateOfBirth 它给了我invalid dateformat error 我也无法
  • 如何在 Excel 中创建自定义数字格式以将逗号显示为小数点分隔符

    例如 代替4 100 3 美国 这将是4 100 3 Go to Tools Options International Tab or Advanced if using Office 2010 Separators 取消选中 使用系统分隔
  • 如何使用 swift 从 firebase 中的 JSON 文件中获取电子邮件 ID

    JSON 图像 https i stack imgur com V7yZA png我想查询如下 如果我提供电子邮件 那么我必须获取 ID 目前我可以获取电子邮件或 ID 但我需要以下示例的解决方案 例如 1 如果我给 email prote
  • 使用 SUM() 而不对结果进行分组

    我已经读过 this https stackoverflow com questions 2381053 how to apply a sum operation without grouping the results in sql 但无
  • 想要产生1-45之间的随机数而不重复

    我遇到了一个非常奇怪的问题 我试图找到它的解决方案但徒劳 我的问题是我想创建一个 1 45 之间的随机数 并且不希望该数字再次重复 根据定义 随机选择将随机重复 但是 您可以构建一个包含每个数字的数组 然后对数组进行打乱 生成随机顺序的数字
  • 如何使用 AWS CLI 创建 AWS Lambda 函数?

    我正在尝试使用以下命令创建 AWS Lambda 函数 aws lambda create function function name foo runtime nodejs role lambda basic execution hand
  • 监控所有验证事件

    It s quite easy https stackoverflow com a 565560 1997232 to check if certain container or its children have validation e