C# 如何以编程方式选择列表视图项
我正在制作一个图书馆管理软件。当用户单击一本书时,我希望显示有关该书的完整信息。类型手册的属性之一是标记。因为一本书可能有很多标签,所以我决定使用列表视图来显示标签 我想在列表视图中选择标记。我该怎么做?我找到了。公认的答案是使用方法C# 如何以编程方式选择列表视图项,c#,listview,uwp,C#,Listview,Uwp,我正在制作一个图书馆管理软件。当用户单击一本书时,我希望显示有关该书的完整信息。类型手册的属性之一是标记。因为一本书可能有很多标签,所以我决定使用列表视图来显示标签 我想在列表视图中选择标记。我该怎么做?我找到了。公认的答案是使用方法ListView.Select(),不幸的是,该方法不存在。另外,ListView.Items[0]。Selected=true不编译。这就是错误: 错误CS1061“object”不包含“Selected”的定义,并且找不到接受“object”类型的第一个参数的可
ListView.Select()
,不幸的是,该方法不存在。另外,ListView.Items[0]。Selected=true代码>不编译。这就是错误:
错误CS1061“object”不包含“Selected”的定义,并且找不到接受“object”类型的第一个参数的可访问扩展方法“Selected”(是否缺少using指令或程序集引用?)
编辑:有人要求输入代码。给你
这是listview:
<ListView x:Name="TagsListView"
SelectionMode="Multiple"
ItemsSource="{x:Bind Tags}"
Grid.Row="4"
Grid.Column="1"/>
编辑:我觉得你们不理解这个问题。问题是
ListView.Items[0].Selected = true;
上面的代码行不可编译!它给出了上面提到的错误。Select()
只激活控件(将焦点设置为该控件)而不选择其项,因此它不是您要查找的内容
但你刚才提到的这个问题就是你问题的答案:
ListView1.Items[0].Selected = true;
但是,您应该使用现有ListView实例的名称属性,而不是ListView本身。如果您没有重命名它,它应该类似于
listView1
。基于此,我认为您应该将标记添加到TagsListView。SelectedItems当您更新ListView
中的选定项时,您的ListView可能不会在当时使用数据进行初始化,请尝试在页面Loaded
事件中更新ListView,如下所示
public sealed partial class BookInfo_View : Page
{
//don't worry about DataAccess.
private Book book = new Book();
private List<string> Tags = DataAccess.GetTags();
private string[] selectedTags;
public BookInfo_View()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
book = (Book)e.Parameter;
//dont worry about how this works. This line of code gives me the tags
selectedTags = book.Tags.Split(';', System.StringSplitOptions.RemoveEmptyEntries);
//here i want to select the selected tags
this.Loaded += OnPageLoaded;
}
private void OnPageLoaded(object sender, RoutedEventArgs e)
{
foreach (string selectedTag in selectedTags)
{
TagsListView.SelectedItems.Add(selectedTag);
}
}
}
public sealed分部类图书信息\u查看:第页
{
//不要担心数据访问。
私人书籍=新书();
private List Tags=DataAccess.GetTags();
私有字符串[]选择的标记;
公共图书信息视图()
{
this.InitializeComponent();
}
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
book=(book)e.参数;
//不用担心它是如何工作的。这行代码给了我标签
selectedTags=book.Tags.Split(“;”,System.StringSplitOptions.RemoveEmptyEntries);
//我想在这里选择所选的标签
this.Loaded+=OnPageLoaded;
}
private void OnPageLoaded(对象发送方、路由目标方)
{
foreach(selectedTags中的字符串selectedTag)
{
TagsListView.SelectedItems.Add(selectedTag);
}
}
}
检查此项:我对每个(selectedTags中的字符串selectedTag){TagsListView.SelectedItems.Add(selectedTag);}进行了此项检查。。它没有突出显示列表视图项。我觉得this.Loaded+=OnpageLoaded应该在构造函数中,因为构造函数将只调用一次,但OnNavigateTo()可能会被多次调用once@Hemil是的,您是正确的,或者您可以在OnNavigatedFrom
中注销它。
ListView1.Items[0].Selected = true;
public sealed partial class BookInfo_View : Page
{
//don't worry about DataAccess.
private Book book = new Book();
private List<string> Tags = DataAccess.GetTags();
private string[] selectedTags;
public BookInfo_View()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
book = (Book)e.Parameter;
//dont worry about how this works. This line of code gives me the tags
selectedTags = book.Tags.Split(';', System.StringSplitOptions.RemoveEmptyEntries);
//here i want to select the selected tags
this.Loaded += OnPageLoaded;
}
private void OnPageLoaded(object sender, RoutedEventArgs e)
{
foreach (string selectedTag in selectedTags)
{
TagsListView.SelectedItems.Add(selectedTag);
}
}
}