Jak obsługiwać zdarzenie MouseDoubleClick dla każdego elementu w widoku ListView
Aby obsłużyć zdarzenie dla elementu w ListView, należy dodać program obsługi zdarzeń do każdego ListViewItem. Jeśli ListView jest powiązana ze źródłem danych, nie należy jawnie tworzyć ListViewItem, ale można obsłużyć zdarzenie dla każdego elementu, dodając EventSetter do stylu ListViewItem.
Przykład
Poniższy przykład tworzy ListView powiązane z danymi i tworzy Style w celu dodania procedury obsługi zdarzeń do każdego ListViewItem.
<!--XmlDataProvider is defined in a ResourceDictionary,
such as Window.Resources-->
<XmlDataProvider x:Key="InventoryData" XPath="Books">
<x:XData>
<Books xmlns="">
<Book ISBN="0-7356-0562-9" Stock="in" Number="9">
<Title>XML in Action</Title>
<Summary>XML Web Technology</Summary>
</Book>
<Book ISBN="0-7356-1370-2" Stock="in" Number="8">
<Title>Programming Microsoft Windows With C#</Title>
<Summary>C# Programming using the .NET Framework</Summary>
</Book>
<Book ISBN="0-7356-1288-9" Stock="out" Number="7">
<Title>Inside C#</Title>
<Summary>C# Language Programming</Summary>
</Book>
<Book ISBN="0-7356-1377-X" Stock="in" Number="5">
<Title>Introducing Microsoft .NET</Title>
<Summary>Overview of .NET Technology</Summary>
</Book>
<Book ISBN="0-7356-1448-2" Stock="out" Number="4">
<Title>Microsoft C# Language Specifications</Title>
<Summary>The C# language definition</Summary>
</Book>
</Books>
</x:XData>
</XmlDataProvider>
<!--The Style is defined in a ResourceDictionary,
such as Window.Resources-->
<Style TargetType="ListViewItem">
<EventSetter Event="MouseDoubleClick" Handler="ListViewItem_MouseDoubleClick"/>
</Style>
<ListView ItemsSource="{Binding Source={StaticResource InventoryData}, XPath=Book}">
<ListView.View>
<GridView>
<GridViewColumn Width="300" Header="Title"
DisplayMemberBinding="{Binding XPath=Title}"/>
<GridViewColumn Width="150" Header="ISBN"
DisplayMemberBinding="{Binding XPath=@ISBN}"/>
</GridView>
</ListView.View>
</ListView>
Poniższy przykład obsługuje zdarzenie MouseDoubleClick.
void ListViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
XmlElement book = ((ListViewItem) sender).Content as XmlElement;
if (book == null)
{
return;
}
if (book.GetAttribute("Stock") == "out")
{
MessageBox.Show("Time to order more copies of " + book["Title"].InnerText);
}
else
{
MessageBox.Show(book["Title"].InnerText + " is available.");
}
}
Private Sub ListViewItem_MouseDoubleClick(ByVal sender As Object, _
ByVal e As MouseButtonEventArgs)
Dim lvi As ListViewItem = CType(sender, ListViewItem)
Dim book As XmlElement = CType(lvi.Content, XmlElement)
If book.GetAttribute("Stock") = "out" Then
MessageBox.Show("Time to order more copies of " + book("Title").InnerText)
Else
MessageBox.Show(book("Title").InnerText + " is available.")
End If
End Sub
Notatka
Jest to najczęstsze wiązanie ListView ze źródłem danych, jednak można użyć stylu, aby dodać program obsługi zdarzeń do każdego ListViewItem w ListView, które nie są powiązane z danymi, niezależnie od tego, czy jawnie utworzysz ListViewItem. Aby uzyskać więcej informacji na temat jawnie i niejawnie utworzonych kontrolek ListViewItem, zobacz ItemsControl.
Zobacz też
- XmlElement
- omówienie powiązania danych
- Stylizacja i tworzenie szablonów
- Wiązanie z danymi XML poprzez element XMLDataProvider i zapytania XPath
-
ListView — omówienie
.NET Desktop feedback