我正在制作图书馆管理软件。当用户单击一本书时,我想显示有关这本书的完整信息。书籍类型的属性之一是标签。因为一本书可能有很多标签,所以我决定使用列表视图来显示标签。
我想在列表视图中选择标签。我该怎么做?我找到了this question。接受的答案表明,使用的方法ListView.Select()
不幸地不存在。另外,ListView.Items[0].Selected = true;
无法编译。这是错误:
错误CS1061'对象'不包含'选定对象'的定义,并且找不到可以接受的扩展方法'选定对象'接受类型为'对象'的第一个参数(您是否缺少using指令或程序集引用?)
编辑:有人要求输入代码。在这里。
这是列表视图:
<ListView x:Name="TagsListView"
SelectionMode="Multiple"
ItemsSource="{x:Bind Tags}"
Grid.Row="4"
Grid.Column="1"/>
这是背后的代码:
public sealed partial class BookInfo_View : Page
{
//don't worry about DataAccess.
private Book book = new Book();
private List<string> Tags = DataAccess.GetTags();
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
string[] selectedTags = book.Tags.Split(';', System.StringSplitOptions.RemoveEmptyEntries);
//here i want to select the selected tags
}
}
这是书本课:
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
public string Publisher { get; set; }
public string ISBN { get; set; }
public int Quantity { get; set; }
public string CoverImageLocation { get; set; }
public string Tags { get; set; }
}
编辑:我觉得你们不明白这个问题。问题是
ListView.Items[0].Selected = true;
上面的代码行无法编译!它给出了上面提到的错误
答案 0 :(得分:1)
当您更新ListView
中的OnNavigatedTo
个选定项时,您的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);
}
}
}
答案 1 :(得分:0)
ListView.Select()
仅激活控件(将焦点设置给它),并且不选择其项目,因此它不是您想要的。
但是您已经提到的这个问题的答案是:
ListView1.Items[0].Selected = true;
但是,您应该使用存在ListView实例的名称属性,而不要使用ListView
本身。如果您尚未重命名,则其名称应该类似于listView1
。
答案 2 :(得分:0)
基于this,我认为您应该将标签添加到TagsListView.SelectedItems