GridView WPF MVVM中TextBox的TextChanged事件

时间:2014-01-14 04:55:13

标签: c# wpf gridview mvvm

我是MVVM模式的新手。我有一个表单,其中包含一个TextBox和一个DataGrid。我与DataGrid绑定ObservableCollection。我希望能够使用TextChanged TextBox事件进行搜索,并在DataGrid中显示结果。

我在TextBox及其模型视图模型中使用了GridView。基本上,我想要做的是每次编辑框中的文本时调用方法。即输入文本时,函数将调用。这是文本更改事件应该工作。但在模型视图 - 视图模型中,我该怎么办?请帮帮我。任何想法......

1 个答案:

答案 0 :(得分:1)

您在绑定到文本框的属性的setter中触发该函数。您还必须将绑定的UpdateSourceTrigger设置为PropertyChanged,以便每次更改文本框的内容时触发它。

setter中触发的函数应该更新ObservableCollection,这将导致DataGrid更新其内容。

请看下面的代码示例,代码不会编译,但会显示一般的想法。

XAML:

<DataGrid ItemsSource="{Binding Rows}" AutoGenerateColumns="False" >
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding Text}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

SubviewModel.cs:

public SubViewModel(ViewModel vm)
{
  _vm = vm;
}

private string _text;
private ViewModel _vm;

public string Text
{
  get 
  {
    return _text;
  }
  set
  {
    if (_text == value)
    {
      return;
    }

    _text = value;
    OnPropertyChanged("Text");
    RefreshResult();
}

private void RefreshResult()
{
  // Do something with the _text and manipulate the _vm.Rows?
}

ViewModel.cs:

private ObservableCollection<SubViewModel> _rows;
public ViewModel()
{
   //Initialize the sub view models
   _rows = new ObservableCollection<SubViewModel>();

   //Populate the list somehow
   foreach (var r in sourceOfRows)
   {
      _rows.Add(new SubViewModel(this));
   }
}

public ObservableCollection<SubViewModels> Rows
{
  get 
  {
    return _rows;
  }
}
相关问题