WPF DataGrid的模板列中的文本框未激发属性

问题描述

|| 我有一个带有模板列的数据网格,并且在该模板中是一个文本框。它绑定到组成itemssource的集合中对象的\'Quantity \'属性。数量是整数。当我将一个项目添加到数据网格时,我正在向该项目的PropertyChanged事件添加一个事件处理程序:
EnteredPart.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(p_PropertyChanged);
当用户在文本框中输入整数时,此方法工作正常... p_PropertyChanged处理程序将触发,我可以禁用按钮并根据需要更改数量。当用户输入非整数时,不会调用处理程序,我只会在文本框周围看到一个红色的轮廓。因此,我无法在需要时禁用必要的按钮(应该禁用这些按钮,因为数量不合法)。有什么办法可以对此进行处理? 编辑:我尝试将Quantity属性更改为字符串,这导致在输入非整数值时调用属性更改处理程序。但是,然后我在文本框中添加了验证以进行检查,如果Validate方法返回false,则更改属性的处理函数将再次停止被单击。有没有办法同时获得验证和属性更改通知? 编辑2:这是我在另一个位置遇到此问题的另一个实例。我有一个添加/编辑电话号码的表格。电话号码文本框如下所示:
  <TextBox >
       <TextBox.Text>
           <Binding Path=\"Phone.Number\">
               <Binding.ValidationRules>
                   <local:PhoneValidationRule />
               </Binding.ValidationRules>
           </Binding>
       </TextBox.Text>
   </TextBox>
单击保存按钮后,我需要在我的视图模型中检查数字是否有效,因为如果无效,则我不想运行save命令。但是,似乎没有任何方法可以执行此操作,因为如果验证失败,则Phone.Number属性将具有null值,并且我无法检查是否应该运行保存命令。我要么需要访问错误状态(我认为该状态可以通过Validation.GetErrors起作用,但不能这样做),或者需要访问文本框内的实际文本,而该文本框在viewmodel中不可用。     

解决方法

        仅作记录,如果您使用的是MVVM体系结构,则View部分中的验证存在许多缺点。 您可以在此处尝试在视图中检查模型的内容:因此,通过在视图中调用模型来破坏MVVM的体系结构。 使用
IDataErrorInfo
将帮助您实现MVVM的主要目标(即,将三个部分明确分开)。 只是一个例子: 我认为这里您只是在执行一个非常小的验证(只需检查它是否为int即可)。 但是在不同的环境中,假设您的模型要复杂得多,并且需要更深入的验证。使用
IDataErrorInfo
可以帮助您深入检查模型,而无需从视图中调用它。 事实上,以我个人的经验,由于我经常使用大型且高度相关的数据集,因此即使没有
IDataErrorInfo
,我也无法使用验证图片,因为花太多的钱去研究所有呈现的数据并发现潜在的错误     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...