WPF TextBox触发器

时间:2012-02-14 06:13:22

标签: wpf

我有以下xaml:

 <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);
            }
        }


} 

MainWindow是从窗口派生的类。但是当文本框中的文本发生变化时它没有被击中。但是,如果上面的代码在mainwindow类中被修改,它就可以正常工作。请帮助。

1 个答案:

答案 0 :(得分:0)

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

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

viewmodel或类似的东西

public class SearchVM 
{
   private string searchtext;

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

mainwindow:你必须设置 DataContext

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

代码是手写的,但应该带你朝正确的方向发展。

ps:请阅读有关数据绑定,datacontext和MVVM的信息