XAML用户控制验证

时间:2012-07-13 17:33:48

标签: validation xaml user-controls

我有一个用户控件,它是一个文本框和两个按钮的组合。我已经设置了Dependency属性,以便它正确地绑定到我的模型。问题是当我有验证错误时,“红色”边框包装文本框和按钮。

我想改变行为,以便在出现错误时,只有内部文本框有红色边框,但无法弄清楚如何执行此操作。

[试图张贴图片,但我不够高:-(]

我的文本框将其作为绑定(在用户控件内部,它包含在一个带有按钮堆栈面板的网格中,因为它们是动态的)

Codebehind

private static DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(UserControl));

XAML文件

<Textbox Grid.Column="0"
         Text="{Binding Text, Mode=TwoWay, StringFormat={StaticResource CommaFormat}
            , RelativeSource={RelativeSource FindAncestor
            , AncestorType={x:Type UserControl}}, ValidatesOnDataErrors=True}"
         x:Name="txt" 
         MaxLength="6" Height="22" Width="65" VerticalAlignment="Top" />

以我的主要形式..我有这个xaml绑定

<WeightTextbox Grid.Column="1" Grid.Row="2" Margin="5,0"
               Text="{Binding SelectedDocument.Weight1,
                      Mode=TwoWay,
                      ValidatesOnDataErrors=True,
                      TargetNullValue={x:Static sys:String.Empty}}" />

注意:这会在单个窗体上显示5次,以便我可以为文档收集不同的权重。

我试过搜索,但一直找不到任何东西。

编辑(最后足够高的代表添加图像)

1 个答案:

答案 0 :(得分:0)

昨天终于有一个啊哈时刻,所以我发布这个以防万一有人来搜索。在我的WeightTextbox中添加了一个名为“Required”的依赖属性

  private static DependencyProperty RequiredProperty = DependencyProperty.Register("Required", typeof(bool), typeof(xagDateTimeCustom));

    public Boolean Required
    {
        get
        {
            return (bool)GetValue(RequiredProperty);
        }
        set
        {
            bool oldValue = Required;
            SetValue(RequiredProperty, value);
            DependencyPropertyChangedEventArgs e = new DependencyPropertyChangedEventArgs(RequiredProperty, oldValue, value);
            OnPropertyChanged(e);
        }
    }

在我的主窗体中,我现在执行以下操作..(设置了新的必需属性,并且ValidatesOnDataErrors设置为False

<WeightTextbox Grid.Column="1" Grid.Row="2" Margin="5,0"
               Required=True
               Text="{Binding SelectedDocument.Weight1,
                      Mode=TwoWay,
                      ValidatesOnDataErrors=False,
                      TargetNullValue={x:Static sys:String.Empty}}" />

然后在我的自定义控件中,我实现了IDataErrorInfo,它现在似乎正常工作。

enter image description here