2013-07-01 22 views
6

Bir düğmeye bastığımda iki Tex kutusunun değerini (giriş penceresini simüle ediyorum) almaya çalışıyorum. Düğmede atanan komut doğru bir şekilde patlar, ancak "giriş" yapmak için metin kutularının değerini nasıl alacağımı bilmiyorum.WPF & MVVM: Değerleri metin kutularından alın ve ViewModel'e gönderin

class LoginViewModel : BaseViewModel 
{ 
    public LoginViewModel() 
    { 

    } 

    private DelegateCommand loginCommand; 
    public ICommand LoginCommand 
    { 
     get 
     { 
      if (loginCommand == null) 
       loginCommand = new DelegateCommand(new Action(LoginExecuted), 
           new Func<bool>(LoginCanExecute)); 
       return loginCommand; 
      } 
     } 

    public bool LoginCanExecute() 
    { 
     //Basic strings validation... 
     return true; 
    } 
    public void LoginExecuted() 
    { 
     //Do the validation with the Database. 
     System.Windows.MessageBox.Show("OK"); 
    } 
} 

Bu görünümdür: Biri yardımcı olabilir

<Grid DataContext="{StaticResource LoginViewModel}"> 

      <TextBox x:Name="LoginTxtBox" HorizontalAlignment="Left" Height="23" Margin="34,62,0,0" Width="154" /> 
      <PasswordBox x:Name="PasswordTxtBox" HorizontalAlignment="Left" Height="23" Margin="34,104,0,0" Width="154"/> 
      <Button x:Name="btnAccept" 
      HorizontalAlignment="Left" 
      Margin="34,153,0,0" 
      Width="108" 
      Content="{DynamicResource acceptBtn}" Height="31" BorderThickness="3" 
      Command="{Binding LoginCommand}"/> 

... Ben sonsuz minnettar olacağım

Bu benim ViewModel olduğunu.

cevap

12

Genellikle, ViewModel'inizdeki özelliklere TextBox.Text özelliklerini bağlarsınız. Bu şekilde, değerler Görünüm değil, ViewModel içinde saklanır ve gerekli değerlerin "alınması" yoktur.

class LoginViewModel : BaseViewModel 
{ 
    //... 
    private string userName; 
    public string UserName 
    { 
     get { return this.userName; } 
     set 
     { 
      // Implement with property changed handling for INotifyPropertyChanged 
      if (!string.Equals(this.userName, value)) 
      { 
       this.userName = value; 
       this.RaisePropertyChanged(); // Method to raise the PropertyChanged event in your BaseViewModel class... 
      } 
     } 
    } 

    // Same for Password... 

Ardından, XAML, sen böyle bir şey yapmak istiyorum: Bu noktada

<TextBox Text="{Binding UserName}" HorizontalAlignment="Left" Height="23" Margin="34,62,0,0" Width="154" /> 
<PasswordBox Text="{Binding Password}" HorizontalAlignment="Left" Height="23" Margin="34,104,0,0" Width="154"/> 

, LoginCommand doğrudan yerel özelliklerini kullanabilirsiniz.

+0

Çok iyi! Teşekkür ederim, mükemmel çalışıyor! –

+0

Eski bir gönderi olmasına rağmen, Metin Kutusu alanına birden çok e-posta adresini iletmem gerekirse aynı işlevi nasıl yaparım? TextBox içinde, "[email protected], defg @ yahoo.com, test @ gmail.com" gibi bir yazı yazacağım. O zaman bunu viewmodel'e nasıl bağlarım? – Debhere

+0

@Debhere String.split kullanarak e-postaları bölmeniz gerekir. veya VM'de bunları ayıklamak için benzer. –