2013-10-13 88 views
8

Bir metin kutum var ve KeyEventArgs öğesini viewmodel'den görüntülemeye çalışıyorum. Fakat nasıl uygulanacağını bilmiyorum. Temel olarak ihtiyacım olan şey, eğer bazı özel karakterler yazılırsa, normal metin (A, B, C. gibi) yazılırsa bazı işlevler çağrılır, sonra başka bir işlev çağrılır ve Enter tuşuna basılırsa bazı diğer işlev çağrılacak.Nasıl MVVM içinde yapmak için. VS 2012 ile WPF kullanıyorum.KeyEventArgs'ı ViewModel'den WPF'de Görüntüle (MVVM)

cevap

18

Birçok yaklaşım var. Tek tek hepsini açıkla. Yalnızca bazı temel ve sadece bazı fonksiyon olanlar seçilen tuşa basarak üzerinde seçmiş 1.If iyi yaklaşım yukarıdaki örnekte

<TextBox x:Name="tboxCouponSearch" Text="{Binding SearchMatchHomeorVisitor,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource EfesInputTextbox}" Width="170" Height="26" AcceptsReturn="False" TabIndex="40" TextWrapping="NoWrap" KeyDown="tboxCouponSearch_KeyDown_1"> 
           <TextBox.InputBindings> 
            <KeyBinding Key="Enter" Command="{Binding SearchTextboxEnterKeyCommand}"/> 
            <KeyBinding Key="Left" Command="{Binding LeftRightUpDownARROWkeyPressed}" /> 
            <KeyBinding Key="Down" Command="{Binding LeftRightUpDownARROWkeyPressed}" /> 
            <KeyBinding Key="Up" Command="{Binding LeftRightUpDownARROWkeyPressed}" /> 
            <KeyBinding Key="Right" Command="{Binding LeftRightUpDownARROWkeyPressed}" /> 
           </TextBox.InputBindings>                
          </TextBox> 

takip ediyor söz konusu belirli anahtar tıklama görebilirsiniz sonra uygulanacak olan Bu komutlar yürütülür ve görünüm modeline geçirilir. sonra her zamanki gibi viewmodel'de işlevleri çağırabilirsiniz. Tüm anahtarın 2.If

.. Şimdi bu aşağı tüm anahtarın üzerine ateş veya anahtar yukarı olaylarını olacak

<TextBox x:Name="tboxCouponSearch" Text="{Binding SearchMatchHomeorVisitor,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource EfesInputTextbox}" Width="170" Height="26" AcceptsReturn="False" TabIndex="40" TextWrapping="NoWrap" KeyDown="tboxCouponSearch_KeyDown_1">         
           <i:Interaction.Triggers> 
            <i:EventTrigger EventName="KeyUp"> 
             <i:InvokeCommandAction Command="{Binding SearchTextBoxCommand}" CommandParameter="{Binding Path=Text, RelativeSource={RelativeSource AncestorType={x:Type TextBox}}}"/> 
            </i:EventTrigger>          
           </i:Interaction.Triggers>         
          </TextBox> 

kullanmak için anahtar o zaman daha iyi basıldığında gerçeğin bakılmaksızın izlenir ve herhangi işlev edilecek olan Aramak istediğinizde viewmodel olarak çağırabilirsiniz. (Bunun için projenin Debug klasöründeki interaction.dll ve intereactivity.dll (C sürücüsündeki Program dosyasında Blend yüklemesi üzerine bu dll içerir.

3 .Farklı bir tuşun üzerinde fonksiyonun çağrılması ya da diğer tuşa basılması için başka bir tuşa basılması gibi bir durum söz konusudur. n kodu ardında.

private void Window_KeyUp_1(object sender, KeyEventArgs e) 
     { 
      try 
      { 
       mainWindowViewModel.KeyPressed = e.Key; 

bu şekilde size mainWindowViewModel ViewModel bir örneğidir .. KeyEventArgs yakalayabilirsiniz. Şimdi ViewModel aşağıdaki şekilde

bool CanSearchTextBox 
     { 
      get 
      { 
       if (KeyPressed != Key.Up && KeyPressed != Key.Down && KeyPressed != Key.Left && KeyPressed != Key.Right && MatchSearchList!=null) 
        return true; 
       else 
        return false; 
      } 
     } 
bu özelliği uygulamak ViewModel Şimdi bu

private Key _keyPressed ; 
     public Key KeyPressed 
     { 
      get 
      { 
       return _keyPressed; 
      } 
      set 
      { 
       _keyPressed = value; 
       OnPropertyChanged("KeyPressed"); 
      } 
     } 

sevmiyorum