用户界面与MVVM的交互

mmc*_*rey 2 c# wpf prism mvvm viewmodel

我做了一些谷歌搜索,并没有找到这个难题的答案.

如果您有以下内容:

  • MySuperView
  • MySuperViewModel

MySuperView有两个文本框,它们都绑定到ViewModel上的字符串属性,并使用DelegateCommand将"保存"按钮绑定到ViewModel,使用如下语法:

视图模型:

this.SaveOrderCommand = new DelegateCommand<object>(this.Save, this.CanSave);
Run Code Online (Sandbox Code Playgroud)

视图:

Command="{Binding SaveOrderCommand}"
Run Code Online (Sandbox Code Playgroud)

如何处理UI元素以使用户交互更令人满意.例如,假设在DelegateCommand的保存操作期间发生了一些较低级别的故障,并且您希望触发其中一个TextBox的工具提示.这通常会如何发生?

我想尽可能坚持干净的代码隐藏,但我并不反对将特定于UI的代码放在那里.

Jos*_*ose 6

我建议您的ViewModel实现IDataErrorInfo,以便您可以利用WPF中的验证内容.您无需等到有人点击保存按钮,一旦文本框得到更新,它将被验证.

public string this[ColumnName]
{
  if (Column == "TextProperty")
  {
    if(!ValidateTextProperty())
      return "TextProperty is invalid";
  }
}

void Save(object param)
{
  if (CanSave)
  {
     if (string.IsNullOrEmpty(this["TextProperty"])
     {
        //Add Save code here
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

在您的视图中:

    <TextBox Text={Binding TextProperty, ValidateOnDataErrors="true",
 UpdateSourceTrigger=PropertyChanged}/>
Run Code Online (Sandbox Code Playgroud)

这将在文本框周围放置一个红色框,您可以在文本框样式中添加验证错误模板以添加工具提示,请参见此处