我有一个searchButton和searchTextBox并希望用它们来搜索列表视图,我希望listview将其选择更改为在第一列中具有值的行然后我只是将scrollview转到选择。我的问题是访问listview中的元素并将它们与searchtext框中的字符串进行比较,这是我作为listview的内容
<ListView x:Name="ctlist" HorizontalAlignment="Center" Height="400" Margin="0,0,0,0" VerticalAlignment="Center" Width="1000" Background="AntiqueWhite">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding ElementName=ctlList, Path=ActualWidth }" Padding="0" Margin="0" >
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="adminID" Width="100"/>
<ColumnDefinition x:Name="adminPASS" Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<TextBlock x:Name="adName" Text="{Binding Path=adminName}" Grid.Column="0" TextWrapping="Wrap" />
<TextBlock Text="{Binding Path= adminPass}" Grid.Column="1" TextWrapping="Wrap"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
如何循环浏览列表视图并将搜索框文本与行/列值进行比较?
答案 0 :(得分:1)
如何循环浏览列表视图并将搜索框文本与行/列值进行比较?
您无需考虑搜索ListView
控件本身。实际上,ListView
中显示的数据与您的代码段中的数据收集绑定。您只需将搜索框文本与绑定到Listview
的项目进行比较,然后在ListView
中将行军项目设置为已选中。
然后我会滚动到选择
为此,只需尝试使用ScrollIntoView方法。 一个完整的代码示例如下:
public sealed partial class ListViewSearch : Page
{
ObservableCollection<admin> admins = new ObservableCollection<admin> { };
public ListViewSearch()
{
this.InitializeComponent();
for(int i=1;i<30;i++)
{
admin item = new admin { adminName = "ID" + i, adminPass = "password" + i };
admins.Add(item);
}
ctlist.ItemsSource = admins;
}
private void btnsearch_Click(object sender, RoutedEventArgs e)
{
string searchtext = txtserch.Text;
foreach(admin adminitem in admins)
{
if(adminitem.adminName.Contains(searchtext))
{
ctlist.SelectedItem = adminitem;
ctlist.ScrollIntoView(ctlist.SelectedItem);
break;
}
}
}
}
public class admin
{
public string adminName { get; set; }
public string adminPass { get; set; }
}
有关ListView
的更多详情,请参阅official sample。