清除ViewModel类中的验证错误

时间:2019-07-25 21:37:56

标签: c# wpf binding viewmodel

问题:

我的GUI上有2个DateTime对象(开始日期和结束日期)。如果开始日期大于结束日期,我已经实现了 IDateErrorInfo 以显示错误,反之亦然

如果我随后选择的结束日期比开始日期短,那么该框中将显示错误。此时,两个日期都显示错误。

Image of above description

如果我随后通过将开始日期设置为小于结束日期来进行纠正,则错误将从开始日期中删除,但是结束日期仍然显示错误(直到我手动单击并更改以将其删除)。

如果将开始日期修改为小于结束日期,如何消除结束日期的错误?

[为说明添加修改内容

public class MainWindowModel : INotifyPropertyChanged, IDataErrorInfo
{
        ....
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
        ....

   public string this[string columnName]
    {
        get
        {                
            string result = null;
            if (columnName == nameof (StartDate))
            {
                result = _contentFactory.ValidateDateTimes(StartDate.Ticks, EndDate.Ticks);
                // Need to clear error on end date.
                if (result == null)
                {    
                     // How to get control of EndDate to populate method below ???
                     Validation.ClearInvalid( ???? );                        

                }
            }
            if (columnName == nameof(EndDate))
            {
                result = _contentFactory.ValidateDateTimes(StartDate.Ticks, EndDate.Ticks);
                if (result == null)
                {     
                       // How to get control name of StartDate.
                      Validation.ClearInvalid( ???? )                                                      
                }
            }

            return result;
        }
    }
}

我到目前为止所取得的成就: 我尝试使用Validation.ClearInvalid,但这需要控件名称。这在View模型类中不可用。因此,我必须从ViewModel设置一个动作(事件),然后在XAML类后面的代码中实现该动作(事件)以直接访问控件。

提到的另一种方法是下面的链接,该链接使用可视树搜索字段。 WPF Validation: Clearing all validation errors

我对这两种方法都不满意。

有没有更好的方法。

非常感谢。

0 个答案:

没有答案