文本更改时的 C# WPF TextBox 调用方法

C# WPF TextBox call method on text change

所以我最近开始第一次用 C# 编写 WPF MVVM 程序,但遇到了一些问题。我制作了一个过滤器 TextBox,用户可以在其中输入内容,它会根据它过滤列表。所以我的 XAML 看起来像这样:

<TextBox Text="{Binding Path=SearchFilter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

因此,当用户输入内容时,它会更新 SearchFilter,然后我希望它进入 运行 LoadList() 方法。如果不在 SearchFilter 的 setter 中进行任何额外调用,我该怎么做?

所以我完全错过了我这边的一些东西,对此感到抱歉。 这种方法应该能帮到你。

XAML

<TextBox Text="{Binding SearchFilter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
               TextChanged="TextBox_TextChanged"/>

代码隐藏

private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
  var viewmodel = DataContext as ViewModel1;

  viewmodel.LoadList();
}

在我的例子中,这是 ViewModel class,您应该尝试使用 INotifyPropertyChanged,因为如果您更改代码中的某些内容,它将更新您的 UI,并且您将来可能会需要它.这也使用了 SetProperty,它使它变得更干净、更容易

public class ViewModel1 : INotifyPropertyChanged
{
  public string Title { get; } = "View 1";

  private string _searchFilter;
  public string SearchFilter 
  {
    get { return _searchFilter; }
    set 
    { 
      SetProperty(ref _searchFilter, value);
    }
  }

  public void LoadList()
  {
    Console.WriteLine("Value: "+SearchFilter);
    // your stuff you do in LoadList
  }

  public event PropertyChangedEventHandler PropertyChanged;
  protected virtual void OnPropertyChanged(string propertyName)
  {
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));  
  }
  protected bool SetProperty<T>(ref T field, T value,
      [CallerMemberName] string propertyName = null)
  {
    if (EqualityComparer<T>.Default.Equals(field, value)) return false;
    field = value;
    OnPropertyChanged(propertyName);
    return false;
  }
}

顺便说一句。对不起过去的答案,我错过了一些我总是忘记这个特定问题的东西:/