2012-02-08 14 views
7

Soy nuevo en MVVM. para aprender, creé una aplicación de muestra para mostrar un mensaje en un cuadro de texto mientras hacía clic en el botón. En mi código, el comando de botón funciona correctamente pero la propiedad no es vinculante para TextBox. ¿Cómo vincular la Propiedad a Textbox usando MVVM?Cómo vincular una propiedad a un cuadro de texto usando MVVM y MVVM toolkit?

Mi código es similar al siguiente.

Ver

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

Ver Modelo

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

//inside the ShowCommand Handler 

TestMessage="Hello World"; 

// A Property to set TextBox Value. 

Modelo

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

Por favor, publique un código más ya que el que ha publicado puede ser interpretado incorrectamente. ¿Tiene una propiedad TestMessage separada en su VM que expone el TestMessage del modelo? –

+0

No, no lo hagas. Ese fue el error. de las respuestas publicadas aquí Entendí cómo hacer esto. Gracias. – niknowj

Respuesta

12
  • en su modelo que tiene el mensaje de texto como un int en lugar de cuerda?

intentar algo como esto:

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

MODELO

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

No entiendo su código pero supongo que debe arreglar su unión con esto:

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

Dónde MyMessage debería ser una propiedad pública de MainViewModel

Cuestiones relacionadas