我在XAML中将ListView
SelectionMode
设置为Single
,并希望在代码隐藏中以编程方式取消选择所选项目,我试图通过此行在MenuFlyout->Closed
事件处理程序(每个ListViewItem
附加MenuFlyout
):
NotationListView->SelectedIndex = -1;
不幸的是,这不起作用,应用程序崩溃了。任何其他值都适用并选择相应的ListViewItem
,但-1
只是没有达到我的预期。
我该怎么做?
ListView
(缩写)的XAML定义:<ListView x:Name="NotationListView"
SelectionMode="None"
IsItemClickEnabled="True"
ItemClick="NotationListView_ItemClicked"/>
ListViewItem^ item = (ListViewItem^) ((TextBlock^) e->ClickedItem)->Parent;
item->Foreground = ref new SolidColorBrush(Colors::Green);
Flyout::ShowAttachedFlyout(item);
selectedItem = item;
selectedItem
只是在xaml.h文件中声明的变量,用于存储所选的Item。这样,我可以在MenuFlyoutItems
的Click-EventHandlers中轻松使用它。
现在你可能会注意到我没有办法访问我迫切需要的点击项目的索引。但是因为所有ListViewItems
都是以编程方式创建的,所以我可以将它添加到创建的末尾:
auto items = NotationListView->Items;
Box<unsigned int>^ indexBox = ref new Box<unsigned int>(items->Size);
item->Tag = indexBox;
items->Append(item);
现在我只用行
获得每个项目的索引unsigned int i = ((Box<unsigned int>^)selectedItem->Tag)->Value;
这很简单。
if (selectedItem){
selectedItem->Foreground = ref new SolidColorBrush(Colors::Black);
selectedItem = nullptr;
}
答案 0 :(得分:1)
您需要的属性取决于您如何实现ListView。另外,请确保使用了您想要使用的正确设置。
来源 - http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.listview.aspx
答案 1 :(得分:0)
我希望ListView->Refresh()
可能会做这样的事情,但唉,不。
相反,我必须重新填充整个ListView
只是为了重置选择,因为它不是本机可修改的属性。 (为什么?)
listView1->Items->Clear();
ListViewItem^ listViewItem1 = (gcnew ListViewItem(gcnew cli::array< String^ >(2)
{
L"Column 1",
L"Column 2"
}, -1));
ListViewItem^ listViewItem2 = (gcnew ListViewItem(gcnew cli::array< String^ >(2)
{
L"Column 1",
L"Column 2"
}, -1));
ListViewItem^ listViewItem3 = (gcnew ListViewItem(gcnew cli::array< String^ >(2)
{
L"Column 1",
L"Column 2"
}, -1));
listView1->Items->AddRange(gcnew cli::array< ListViewItem^ >(3)
{
listViewItem1,
listViewItem2,
listViewItem3
});
您也可以完全动态地执行此操作 - 这只是一个静态示例。