2009-07-01 55 views
2

我做了一些Google搜索,没有找到这个难题的答案。用户界面与MVVM的互动

只要你具备以下条件:

  • MySuperView
  • MySuperViewModel

MySuperView有两个文本框都绑定到视图模型 字符串属性和您使用DelegateCommand绑定你的“保存'按钮使用以下语法的ViewModel:

ViewModel:

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

查看:

Command="{Binding SaveOrderCommand}" 

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

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

回答

0

基本上,您需要为您的视图创建属性,以便观察(通常通过触发器),根据代码执行过程中发生的情况更新UI。

1

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

您需要为您的财产提供更改通知,方法是将其设置为DependencyProperty或使用INotifyPropertyChanged。

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

这将会把一个红色框周围的文本框,你可以添加一个验证错误模板文本框样式添加工具提示看 here