XAML ListBox数据绑定 - 为每个项添加Click处理程序

时间:2015-12-22 17:54:19

标签: c# wpf xaml data-binding

我希望获取某个文件夹中的所有文件,并将它们显示在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处理程序并调用一个函数并传入单击项目的文本。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

如果它不是MVVM,那么您可以定义一个带有处理程序的按钮,该按钮存在于代码库中。在每个按钮上单击将执行相同的处理程序。现在问题是如何注入文件Name。因此,您可以在按钮的Tag对象中添加文件Name,可以在处理程序后面的代码中读取,以便进一步处理。

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
}

答案 1 :(得分:2)

只需在ListBox中添加事件:

NULL