我有以下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类中被修改,它就可以正常工作。请帮助。
答案 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的信息