【问题标题】:Search in datagrid在数据网格中搜索
【发布时间】:2013-12-17 07:42:04
【问题描述】:

我有一个文本框,输入的内容必须在数据网格中进行搜索。

为了清楚起见,链接中的图片。 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>

【问题讨论】:

  • 您希望如何处理匹配的项目?例如,您希望将您的收藏限制为仅显示匹配项还是选择第一个匹配项?
  • 什么都好。选择最接近或类似的那个。
  • 如果您正在寻找多选(希望通过您的虚拟机完全控制选择),请查看此stackoverflow.com/questions/2615271/…,了解如何将行选择绑定到各自的虚拟机。
  • Nono,它必须选择与最接近的搜索匹配的行。我已经有了匹配项,但现在我希望它自动选择行

标签: c# xaml mvvm


【解决方案1】:

您可以在 ViewModel 中创建一个名为 SelectedPerson 的附加属性

        private Person_selectedperson;

        public Person SelectedPerson
        {
            get { return _selectedperson; }
            set
            {
                _selectedperson = value;
                OnPropertyChanged("SelectedPerson");
            }
        }

此属性应代表联系人集合中的一个实例。然后,将此属性绑定到数据网格中的 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();
        }

除了此示例之外,还需要额外的错误处理(检查是否没有匹配项等)

【讨论】:

  • 这行得通!谢谢。但我希望数据网格选择它得到的人的行。
猜你喜欢
  • 2013-12-13
  • 2012-09-27
  • 2015-04-24
  • 1970-01-01
  • 2013-05-10
  • 2012-07-03
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
相关资源
最近更新 更多