验证规则未被调用

时间:2011-08-02 13:46:16

标签: c# wpf validation binding

我的XAML中有以下代码:

<ItemsControl ItemsSource="{Binding Dimensions}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition MinWidth="100" MaxWidth="300" />
                        </Grid.ColumnDefinitions>

                        <Label Grid.Column="0"
                               Content="Dimension x" 
                               Target="{Binding ElementName=DimTextBox}" />
                        <TextBox Grid.Column="1" Name="DimTextBox" >
                            <Binding Path="/"  UpdateSourceTrigger="PropertyChanged">
                                <Binding.ValidationRules>
                                    <valid:DataSetDimensionValidationRule />
                                </Binding.ValidationRules>
                            </Binding>
                        </TextBox>
                    </Grid>
                </DataTemplate>              
            </ItemsControl.ItemTemplate>                
        </ItemsControl>

其中Dimensions是一个Observable字符串集合。它似乎绑定好,我得到预期数量的标签和文本框,文本框包含默认值。但是,当我在文本框中更改某些内容时,我的验证规则不会被调用。

我知道这可能很简单,但我被困住了。帮助

3 个答案:

答案 0 :(得分:1)

试试这个......

<TextBox Grid.Column="1" Name="DimTextBox" >
    <Binding ValidatesOnExceptions="True" Path="/" UpdateSourceTrigger="PropertyChanged">
        <Binding.ValidationRules>
            <valid:DataSetDimensionValidationRule />
        </Binding.ValidationRules>
    </Binding>
</TextBox>

修改 如果上述方法无效,请尝试在验证规则中使用这些属性: http://msdn.microsoft.com/en-us/library/cc647541.aspx

答案 1 :(得分:0)

我认为你只需要在绑定元素上设置ValidatesOnDataErrors =“True”,这样看起来就像这样。

<TextBox Grid.Column="1" Name="DimTextBox" >
     <Binding Path="/"  UpdateSourceTrigger="PropertyChanged">
           <Binding.ValidationRules>
               <valid:DataSetDimensionValidationRule />
           </Binding.ValidationRules>
     </Binding>
</TextBox>

答案 2 :(得分:0)

我不确定问题究竟是什么,但当我将Dimensions更新为DimensionView的ObservableCollection时,DimensionView是我自己的类,包含一个Label和一个值。代码:

<Label Grid.Column="0"
                           Content="{Binding Label}" 
                           Target="{Binding ElementName=DimTextBox}" />
                    <TextBox Grid.Column="1" Name="DimTextBox" >
                        <Binding Path="Value"  UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <valid:DataSetDimensionValidationRule />
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox>

我想也许它只是不喜欢Path =“/”