2012-02-08 12 views
7

私はMVVMを初めて使用しています。私はボタンをクリックしながらテキストボックスにメッセージを表示するサンプルアプリケーションを作成しました。私のコードでは、ボタンコマンドは正常に動作していますが、プロパティはテキストボックスにバインドされていません。 MVVMを使用してTextboxにプロパティをバインドする方法は?MVVMとMVVMツールキットを使用してテキストボックスにプロパティをバインドする方法

私のコードは以下のようになります。

ビュー

<TextBox Name="MessageTextBox" Text="{Binding TestMessage}"/> 
<Button Content="Show" Name="button1" Command="{Binding ShowCommand}"> 
<!-- Command Handler --> 
</Button> 

ビューモデル

MyMessage myMessage; 
public MainViewModel() 
{ 
myMessage=new MyMessage(); 
} 

//inside the ShowCommand Handler 

TestMessage="Hello World"; 

// A Property to set TextBox Value. 

モデル

public class MyMessage: INotifyPropertyChanged   
{  
    private string testMessage; 
    public string TestMessage 
    { 
     get { return testMessage; } 
     set 
     { 
      testMessage= value; 
      OnPropertyChanged("TestName"); 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

} 
+0

投稿したコードが誤って解釈される可能性があるので、コードをいくつか追加してください。あなたのVMにモデルのTestMessageを公開する別のTestMessageプロパティがありますか? –

+0

いいえDo not Have。それは間違いでした。 Answersからここに投稿しました私はこれを行う方法を理解しました。ありがとうございました。 – niknowj

答えて

12
  • の公共財産である必要がありどこ?

    のViewModel

    private MyMessage message; 
    
    public MainViewModel() 
    { 
        message = new MyMessage(); 
    } 
    
    public MyMessage Message 
    { 
        get { return message;} 
        set { message = value;} 
    } 
    
    //in your command: 
    this.Message.TestMessage = "Hello World!"; 
    

    MODEL

    public class MyMessage: INotifyPropertyChanged 
    { 
        private string testMessage 
    
        public string TestMessage; 
        { 
         get{ return testMessage; } 
         set 
         { 
          testMessage = value; 
          this.OnPropertyChanged("TestMessage"); 
         } 
        } 
        //INotifyChanged Events 
    } 
    

    XAML

はこのような何かを試してみてください

<TextBox Text="{Binding Message.TestMessage, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
5

私はあなたのコードを理解していないが、私はあなたがこれを結合固定しなければならないと思います。

<TextBox Name="MessageTextBox" Text="{Binding MyMessage.TestMessage}"/> 

MyMessageあなたはint型ではなく、文字列としてのTextMessageを持っているモデルでMainViewModel

関連する問題