2015-12-22 3 views
0

Я хочу получить все файлы в определенной папке и отобразить их в ListView в WPF.XAML ListBox привязка данных - Добавить обработчик привязки к каждому элементу

У меня есть следующие:

XAML

<ListBox Name="MyListBox""> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Code Behind

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

Просто добавьте событие в 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(); 
} 
2

Если это не MVVM, вы можете определить кнопку с обработчиком, который существует в базе кода. На каждой кнопке будет выполнен один и тот же обработчик. Теперь вопрос заключается в том, как ввести имя файла. Поэтому для этого вы можете добавить имя файла в тег-объект кнопки, который можно прочитать в коде позади обработчиком для дальнейшей обработки.

XAML

<ListBox Name="MyListBox""> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding}" /> 
       <Button Click="Open_Click" Tag="{Binding}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Код За Handler

void Open_Click(object sender, EventArgs e) 
{ 
    var button = sender as Button; 
    var filename = Convert.ToString(button.Tag); // File Name 
} 
Смежные вопросы