XAML ListBox数据绑定-向每个项添加Click处理程序
本文关键字:添加 Click 处理 程序 ListBox 数据绑定 XAML | 更新日期: 2023-09-27 18:27:49
我希望获得某个文件夹中的所有文件,并将它们显示在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();
}