2009-07-01 10 views
2

私はいくつかのグーグルを行い、このパズルへの答えを見つけられませんでした。ユーザーインターフェイスMVVMとのやりとり

  • MySuperView
  • MySuperViewModel

MySuperViewのViewModel 上の文字列プロパティにバインドされ、ご自分の「保存をバインドするDelegateCommandを使用して、両方の2つのテキストボックスを持っている:あなたは次のように持って提供

'ボタンを使用してViewModelに接続します。

ViewModel:

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

ビュー:

Command="{Binding SaveOrderCommand}" 

あなたがユーザーとの対話をより満足させるためにUI要素に対処するにはどうすればよいです。たとえば、DelegateCommandの保存アクション中に低レベルの障害が発生し、TextBoxのいずれかのツールチップをトリガーしたいとします。これはどのように典型的に起こりますか?

私は可能な限りクリーンなコードビハインドを守りたいと思いますが、私はそこにUI固有のコードを置くことに逆らっていません。

答えて

0

基本的には、ビューのプロパティを作成して(通常はトリガーを介して)、コードの実行中に発生していることに応じてUIを更新する必要があります。

1

ツールチップに例外を表示するには、エラーメッセージを文字列として公開するViewModelにプロパティを追加し、それをTextBoxのToolTipにバインドします。次に、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

を見ます
関連する問題