[英]XAML ListBox data binding - Add Click handler to each item
我希望將所有文件放在某個文件夾中,並在WPF的ListView中顯示它們。
我有以下內容:
XAML
<ListBox Name="MyListBox"">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
背后的代碼
string location = AppDomain.CurrentDomain.BaseDirectory + "MyApp\\Documents\\";
string[] myFiles = Directory.GetFiles(location, "*.pdf")
.Select(path => Path.GetFileName(path).Replace(".pdf",""))
.ToArray();
MyListBox.ItemsSource = myFiles;
這將在我的列表框中列出所有文件。
我想做的是為列表中的每個項目添加一個CLick處理程序,並調用一個函數並傳遞單擊的項目的文本。
我怎樣才能做到這一點?
如果不是MVVM,則可以定義代碼庫中帶有處理程序的按鈕。 在每個按鈕上單擊將執行相同的處理程序。 現在問題來了如何注入文件名。 因此,您可以在按鈕的Tag對象中添加文件名,該文件名可以由處理程序在后面的代碼中讀取以進行進一步處理。
XAML
<ListBox Name="MyListBox"">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}" />
<Button Click="Open_Click" Tag="{Binding}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
處理程序背后的代碼
void Open_Click(object sender, EventArgs e)
{
var button = sender as Button;
var filename = Convert.ToString(button.Tag); // File Name
}
只需在ListBox中添加事件:
<ListBox Name="MyListBox" MouseDoubleClick="Open_Click">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
void Open_Click(object sender, EventArgs e) {
ListBox listbox = sender as ListBox;
string filename = listbox.SelectedItem.ToString();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.