验证在表单页面上输入的数据:WPF

时间:2011-01-30 06:08:11

标签: validation wpf-controls binding

我有大约20个控件绑定到类的不同属性以及如下所示的验证规则。为了便于理解,我正在编写一个控件的代码,因为其他控件是相同的。

<TextBox  Style="{StaticResource errorStyle}" Grid.Column="0" Grid.Row="2" Grid.RowSpan="1" HorizontalAlignment="Left" Margin="110,100,0,0" Name="balesText" VerticalAlignment="Top" Width="170" >
        <TextBox.Text>
            <Binding Source="{StaticResource insertTransaction}" UpdateSourceTrigger="Explicit" Path="Bales">
                <Binding.ValidationRules>
                    <ExceptionValidationRule/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>

现在我正在以下列方式检查代码隐藏中的输入错误

BindingExpression balesBe = balesText.GetBindingExpression(TextBox.TextProperty);
balesBe.UpdateSource();
.
.
if (balesBe.HasError)
        {
            MessageBox.Show("Please correct Errors", "Insert Aborted");
        }
        else
        {
            Binding insertTransactionBinding = BindingOperations.GetBinding(balesText, TextBox.TextProperty);
            InsertTransaction insertTransaction = insertTransactionBinding.Source as InsertTransaction;
            insertMessage = insertTransaction.Add();
            MessageBox.Show(insertMessage, "Transaction");
            this.NavigationService.Refresh();
        }

现在,问题是:有没有办法可以一次性验证这20个控件,或者我需要手动定义他们的BindingExpression并检查验证错误?

1 个答案:

答案 0 :(得分:1)

创建自己的UserControl“OwnTextBox”。从TextBox(OwnTextBox: TextBox)继承它并在那里定义DependencyProperty Validate。然后你只需要记住,TextBox是逻辑树的一部分并从中进行搜索。