验证和NotififyOnValidation错误不起作用

时间:2018-05-17 11:47:31

标签: wpf mvvm

我有一个属性名称,在模型中是必需的。然后在VM中我有一个Name属性来访问模型之一。在我看来,我将文本框绑定到VM的Name属性。但是当文本框为空时,文本框不会显示为红色。我收到错误:字段名称是必需的。但是文本框再次变为红色。请帮忙

这是模型:

public class Task : BasicAuditTrail
{

    [Required]
    [MaxLength(256)]
    public string Name { get; set; }
}

这是VM:

public class TaskManagerViewModel : ViewModelBase, ITaskManagerViewModel
{
    public Task CurrentTask => taskManager.CurrentTask;

    public string Name
    {
        get
        {
            return CurrentTask.Name;
        }
        set
        {
            CurrentTask.Name = value;
            IsDirty = true;
            RaisePropertyChanged();
        }
    }

观点:

<TextBox Grid.Row="0" Grid.Column="3" Name="Name" Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True}" />

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,CurrentTask的Name属性应该直接绑定到Textbox。这使错误正常工作。

要在viemwodel上设置IsDirty属性,请订阅CurrentTask的PropertyChanged事件并在那里设置IsDirty!

PS:确保在CurrentTask发生变化时删除事件,以免发生任何内存泄漏