我有一个文本框,必须在数据网格中搜索输入的内容。
为清晰起见,请在链接中显示图片。 https://www.dropbox.com/s/8s98bes1g54xjaz/Search.png
我使用MVVM模型。
XAML:
Textbox:
<TextBox x:Name="txtZoeken" HorizontalAlignment="Center" VerticalAlignment="Center" Height="29" Grid.Row="0" TextWrapping="Wrap" Width="238" FontSize="20" Text="Zoeken..."/>
Datagrid:
<DataGrid ItemsSource="{Binding Contactpersons}" AutoGenerateColumns="False" x:Name="PersonenGrid" Grid.Column="1" Margin="35,99,8,10" Grid.Row="5" Grid.ColumnSpan="3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command="{Binding EditCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns >
<DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
<DataGridTextColumn Header="Naam" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Bedrijf" Binding="{Binding Company}" />
<DataGridTextColumn Header="Functie" IsReadOnly="True" Binding="{Binding JobRole/Name}"/>
<DataGridTextColumn Header="Stad" Binding="{Binding City}" />
<DataGridTextColumn Header="E-mail" Binding="{Binding Email}" />
<DataGridTextColumn Header="Telefoon" Binding="{Binding Phone}" />
<DataGridTextColumn Header="GSM" Binding="{Binding Cellphone}" />
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:3)
您可以在ViewModel中创建一个名为SelectedPerson
的附加属性 private Person_selectedperson;
public Person SelectedPerson
{
get { return _selectedperson; }
set
{
_selectedperson = value;
OnPropertyChanged("SelectedPerson");
}
}
此属性应代表Contactpersons集合中的一个实例。然后,将此属性绑定到datagrid
中的SelectedItem<DataGrid ItemsSource="{Binding Contactpersons}" SelectedItem="{Binding SelectedPerson}"
然后在与文本框搜索按钮相关的事件/方法中。运行linq查询或类似的东西以查找集合中的第一个匹配项并将SelectedPerson设置为该项目(我在快速编写代码时在搜索单击事件中执行此操作,但是,您可能希望在viewmodel中放置命令以更好地遵循到mvvm)...
private void Button_Click_1(object sender, RoutedEventArgs e)
{
string searchValue = textbox1.Text;
vm.SelectedPerson = vm.Contactpersons.Where(a => a.LastName.Contains(searchValue)).FirstOrDefault();
}
除此示例之外还需要额外的错误处理(检查是否没有匹配等)