我正在尝试在选择列表元素行为时实现自己的逻辑。我想按位置以编程方式突出显示一个选项。我找到了一个有效的解决方案:
myListView.SelectedIndex = position;
这个方法是对该列表项进行“虚拟点击”,我只需要以编程方式证明列表项,但不要点击它。
我在xaml中的listView实现:
<ListView
x:Name="myListView"
SelectionChanged="onmyListViewItemClick"
SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<--here I have 2 textBoxes and one image-->
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
答案 0 :(得分:1)
只是为了清理事情:
ItemClick 在列表视图中的项目收到交互并且IsItemClickEnabled属性为true时发生。 (继承自ListViewBase)
SelectionChanged 当前所选项目发生更改时发生。 (继承自Selector)
因此,在您的情况下,您应该在xaml中使用ItemClick="onmyListViewItemClick"
并继续使用myListView.SelectedIndex = position;
四个您的需求
所以,你的xaml ListView shuold是:
<ListView
x:Name="myListView"
IsItemClickEnabled="true"
ItemClick="onmyListViewItemClick"
SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<--here I have 2 textBoxes and one image-->
</DataTemplate>
</ListView.ItemTemplate>
以及在onmyListViewItemClick
中获取触发元素:
private void onmyListViewItemClick(object sender, ItemClickEventArgs e) {
var selectedOption = (YourObjectElement)e.ClickedItem;
//use your cliked obj data
}
答案 1 :(得分:1)
要更改突出显示的元素而不触发SelectionChanged
事件,您必须为ListViewItem实现自己的可视状态,并且IsSelected
属性不得更改SelectedIndex
。
要实施选择状态,请先在UserControl
内创建一个DataTemplate
。为您的模型创建一个新属性bool IsSelected,在用户控件中,您将声明单元格的VisualState
,并且只要DataContext的IsSelected属性(您的VisualStateManager
,它将更改状态模型)用户控件发生了变化。