【问题标题】:Validation and NotififyOnValidation Error don't work验证和 NotififyOnValidation 错误不起作用
【发布时间】:2018-05-17 11:47:30
【问题描述】:

我有一个模型中需要的属性名称。然后在虚拟机中我有一个访问模型之一的名称属性。在我看来,我将一个文本框与 VM 的 Name 属性绑定。但是文本框为空时不会变红。我确实得到了错误:字段名称是必需的。但是文本框再一次没有变红。请帮忙

这是模型:

public class Task : BasicAuditTrail
{

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

这是虚拟机:

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}" />

【问题讨论】:

  • 为什么不直接将CurrentTask.Name绑定到TextBox
  • 您可以订阅 CurrentTask 的 PropertyChanged 事件并在那里更改 IsDirty 属性
  • 你试过 Rachel 的那个吗?
  • 有什么问题?不是属性改变调用的方法吗?

标签: wpf mvvm


【解决方案1】:

在 cmets 中提到,CurrentTask 的 Name 属性应该直接绑定到 Textbox。这使得错误能够正常工作。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2016-07-24
    • 2018-01-23
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多