2

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

前提是您具备以下条件:

  • 我的超级视图
  • 我的超级视图模型

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

视图模型:

this.SaveOrderCommand = new DelegateCommand<object>(this.Save, this.CanSave);

看法:

Command="{Binding SaveOrderCommand}"

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

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

4

3 回答 3

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

在您看来:

    <TextBox Text={Binding TextProperty, ValidateOnDataErrors="true",
 UpdateSourceTrigger=PropertyChanged}/>

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

于 2009-07-02T02:38:43.990 回答
1

为了在工具提示中显示异常,我将向 ViewModel 添加一个属性,将错误消息作为字符串公开,并将其绑定到 TextBox 的工具提示。然后在您的 Save 方法中,您首先将该属性设置为空字符串,然后在 try..catch 中执行所有实际工作,如果发生异常,则将异常消息推送到该属性中,因此它会自动显示在工具提示中。

您需要为您的属性提供更改通知,方法是使其成为 DependencyProperty 或使用 INotifyPropertyChanged。

于 2009-07-01T22:00:50.777 回答
0

基本上,您会希望为您的视图创建一个属性来观察(通常通过触发器),这将根据您的代码执行中发生的情况更新您的 UI。

于 2009-07-01T21:35:20.797 回答