Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation Silverlight对相关控件的验证?_Validation_Silverlight 3.0 - Fatal编程技术网

Validation Silverlight对相关控件的验证?

Validation Silverlight对相关控件的验证?,validation,silverlight-3.0,Validation,Silverlight 3.0,我有Silverlight 3应用程序,其中有两个日期选择器用于开始日期和结束日期。 它们是绑定到实现验证逻辑的业务对象的数据,因此StartDate必须在EndDate之前,EndDate必须在StartDate之后 到目前为止,一切正常-当在各自的setter中引发验证异常时,这两个控件都会显示相应的验证错误 我的问题是,如果用户更改“other”控件,使得第一个控件中的“invalid”日期现在有效,那么第一个控件的状态不会更改(因为尚未调用其setter) 例如,如果我将StartDat

我有Silverlight 3应用程序,其中有两个日期选择器用于开始日期和结束日期。 它们是绑定到实现验证逻辑的业务对象的数据,因此StartDate必须在EndDate之前,EndDate必须在StartDate之后

到目前为止,一切正常-当在各自的setter中引发验证异常时,这两个控件都会显示相应的验证错误

我的问题是,如果用户更改“other”控件,使得第一个控件中的“invalid”日期现在有效,那么第一个控件的状态不会更改(因为尚未调用其setter)

例如,如果我将StartDate设置为2009年12月15日,将EndDate设置为2009年12月10日,EndDate控件将正确进入无效状态。如果用户将StartDate更改为2009年12月9日,则EndDate控件仍然标记为无效,因为UI尚未调用EndDate setter


是否有一种“干净”的MVVM风格的方法来强制UI重新验证?

使用 基本上,它允许您对一些控件进行分组,并在触发某个命令时验证该组,这对于标准的东西来说非常有效

Xaml用于一些文本框


按照ValidationScope类的链接进行操作。

从中使用ValidationScope类 基本上,它允许您对一些控件进行分组,并在触发某个命令时验证该组,这对于标准的东西来说非常有效

Xaml用于一些文本框

遵循ValidationScope类的链接

<StackPanel local:ValidationScope.ValidationScope="{Binding PersonValidationScope}">
        <TextBox
            Text="{Binding Person.Name, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"
            local:ValidationScope.ValidateBoundProperty="Text" />
        <TextBox
            Text="{Binding Person.Age, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"
            local:ValidationScope.ValidateBoundProperty="Text" />
        <ComboBox
            ItemsSource="{Binding Salutations}"     
         SelectedItem="{Binding Person.Salutation, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}"
    local:ValidationScope.ValidateBoundProperty="SelectedItem" />
    <Button Content="Save" Click="SaveButtonClick" />
</StackPanel>
public void Save()
{
    // This causes all registered bindings to be updated
    PersonValidationScope.ValidateScope();
    if (PersonValidationScope.IsValid())
    {
        // Save changes!
    }
}