2012-02-14 115 views
0

我有以下XAML:WPF文本框触发

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
    xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4" 
    x:Class="WpfApplication4.MainWindow" 
    Title="MainWindow" Height="350" Width="525"> 
<StackPanel> 
    <TextBox Margin="89,116,69,123" x:Name="txtFilter" Background="AliceBlue" > 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="TextChanged"> 
       <cmd:EventToCommand Command="{Binding MyClass:SearchedTextChanged}" CommandParameter="{Binding Text, ElementName=txtFilter}"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </TextBox> 
    <TextBox Width="100" Background="AntiqueWhite"> 
    </TextBox> 

和代码如下:

public partial class MainWindow: Window 

{ 
     public MainWindow() 
{ 

InitializeComponent(); 


} 
} 

public class MyClass : MainWindow 

{ 
public RelayCommand<string> SearchedTextChanged { get; set; } 



MyClass() 
     { 
      SearchedTextChanged = new RelayCommand<string>(OnSearchedTextChanged); 
      DataContext=this; 

     } 

     private void OnSearchedTextChanged(string val) 
     { 
      if (val != null) 
      { 
       System.Diagnostics.Debug.WriteLine(val); 
      } 
     } 


} 

主窗口是从window.But派生的类其当文本框中的文本发生变化时不会受到打击。但是,如果上面的代码在mainwindow类中运行,它可以正常工作。

回答

0

它更容易简单地绑定到Text属性,而不是在这里使用触发器。您只需将UpdateSourceTrigger设置为PropertyChanged。如果你这样做,每次你在文本框中输入文本,它都会在你的viewmodel中设置SearchText属性。

<TextBox Text="{Binding SearchText,UpdateSourceTrigger=PropertyChanged }"/> 

视图模型或类似的

public class SearchVM 
{ 
    private string searchtext; 

    public string SearchText 
    { 
     get{return this.searchtext;} 
     set{this.seachtext = value; //INotifyPropertyChanged should be implemented to 
     } 
    } 
} 

主窗口的东西:你必须设置的DataContext

public partial class MainWindow: Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = new SearchVM(); 
    } 
} 

代码是手写的,但应该带你进入正确的方向。

ps:请阅读关于数据绑定,datacontext和MVVM