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处理程序,并调用一个函数并传入所单击项目的文本。

我该怎么做?

XAML ListBox数据绑定-向每个项添加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();
}