2012-02-08 15 views
7

Jestem nowy dla MVVM. nauczyć się Stworzyłem przykładową aplikację, aby pokazać komunikat w polu tekstowym, klikając przycisk. W moim kodzie polecenie przycisku działa poprawnie, ale właściwość nie jest powiązana z polem tekstowym. Jak powiązać właściwość z polem tekstowym za pomocą MVVM?Jak powiązać właściwość z polem tekstowym za pomocą zestawu narzędzi MVVM i MVVM?

Mój kod jest podobny do podanego poniżej.

Zobacz

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

Widok Model

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

//inside the ShowCommand Handler 

TestMessage="Hello World"; 

// A Property to set TextBox Value. 

model

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

Proszę napisać nieco więcej kodu, niż ten, który wysłałeś, może być nieprawidłowo interpretowany. Czy masz osobną właściwość TestMessage w swojej maszynie wirtualnej, która eksponuje testMessage modelu? –

+0

Nie, nie mam. To był błąd. z Odpowiedzi zamieszczonych tutaj Zrozumiałem, jak to zrobić. Dziękuję Ci. – niknowj

Odpowiedz

12
  • w modelu masz textMessage jako int zamiast ciąg?

spróbować czegoś takiego:

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

Nie rozumiem swój kod, ale myślę, że trzeba naprawić wiążące się z tym:

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

Gdzie MyMessage powinny być własnością publiczną MainViewModel