簡體   English   中英

XAML ListBox數據綁定-將Click處理程序添加到每個項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM