2009-07-01 42 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