【问题标题】:Silverlight validation of dependent controls?Silverlight 验证依赖控件?
【发布时间】:2010-12-28 06:42:01
【问题描述】:

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

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

我的问题是,如果用户更改“其他”控件以使第一个控件中的“无效”日期现在有效,则第一个控件的状态不会改变(因为尚未调用其设置器)。

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

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

【问题讨论】:

    标签: validation silverlight-3.0


    【解决方案1】:

    使用来自here 的 ValidationScope 类 基本上,它允许您对一些控件进行分组,并在触发某个命令时验证该组,非常适用于标准内容。

    一些文本框的 Xaml

    <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>
    

    ViewModel 看起来像这样

    public void Save()
    {
        // This causes all registered bindings to be updated
        PersonValidationScope.ValidateScope();
        if (PersonValidationScope.IsValid())
        {
            // Save changes!
        }
    }
    

    点击 ValidationScope 类的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2012-04-03
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2013-12-06
      相关资源
      最近更新 更多