我是MVVM模式的新手。我有一个表单,其中包含一个TextBox
和一个DataGrid
。我与DataGrid
绑定ObservableCollection
。我希望能够使用TextChanged
TextBox
事件进行搜索,并在DataGrid
中显示结果。
我在TextBox
及其模型视图模型中使用了GridView
。基本上,我想要做的是每次编辑框中的文本时调用方法。即输入文本时,函数将调用。这是文本更改事件应该工作。但在模型视图 - 视图模型中,我该怎么办?请帮帮我。任何想法......
答案 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;
}
}