我有一个带有模板列的数据网格,该模板中有一个文本框。它绑定到构成 itemssource 的集合中对象的“数量”属性。数量是一个整数。当我将一个项目添加到数据网格时,我正在向该项目的 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>
单击保存按钮后,我需要检查我的视图模型是否有效,因为如果不是,我不想运行保存命令。但是,似乎没有任何方法可以做到这一点,因为如果验证失败,那么 Phone.Number 属性的值为 null,我无法检查是否应该运行 save 命令。我要么需要访问错误状态(我认为它可以通过 Validation.GetErrors 工作,但没有),要么需要访问文本框中的实际文本,这在视图模型中不可用。