Как привязать свойство к текстовому полю, используя инструментарий MVVM и MVVM? - PullRequest
7 голосов
/ 08 февраля 2012

Я новичок в MVVM. чтобы узнать, я создал образец приложения, чтобы показать сообщение в текстовом поле, нажимая на кнопку. В моем коде команда кнопки работает правильно, но свойство не привязано к текстовому полю. Как привязать свойство к текстовому полю с помощью MVVM?

Мой код похож на приведенный ниже.

View

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

}

Ответы [ 2 ]

12 голосов
/ 08 февраля 2012
  • в вашей модели textMessage имеет тип int, а не строку?

попробуйте что-то вроде этого:

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!";

МОДЕЛЬ

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 голосов
/ 08 февраля 2012

Я не понимаю ваш код, но я полагаю, вам следует исправить привязку следующим образом:

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

Где MyMessage должно быть публичной собственностью MainViewModel

...