2016-09-19 5 views
1

У меня есть Listview, который содержит список перетаскивания, каждый элемент списка содержит и значок (который является значком MahApps X), и имя файла. Я хочу, чтобы каждый ListviewItem имел этот значок x, и когда пользователь нажимает на значок, он удаляет имя файла из списка Listview или ObservableCollection fileNames. К сожалению, в этом случае я не знаю, как справиться с этим событием, что когда-либо написанный мной код был неправильным. Мой вопрос заключается в том, чтобы показать мне, как это сделать или объяснить мне, как будет работать обработка событий в этом случае и как получить ListViewItem от отправителя. СпасибоПрисоединение события к элементу в listviewItem/Удаление ListviewItem при нажатии на дочерний элемент

Это XAML:

<ListView x:Name="DropList" DockPanel.Dock="Left" Foreground="White" 
      Drop="DropList_Drop" 
      DragEnter="DropList_DragEnter" 
      AllowDrop="True" 
      DragOver="DropList_DragOver" > 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <Rectangle x:Name="DeleteAttachment" Height="Auto" Width="Height" MouseLeftButtonDown="DeleteAttachment_MouseLeftButtonDown"> 
          <Rectangle.Fill> 
           <VisualBrush Visual="{StaticResource appbar_checkmark_cross}" /> 
          </Rectangle.Fill> 
         </Rectangle> 
         <TextBlock Text="{Binding Name}" /> 
        </StackPanel> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 

Это код:

ObservableCollection<String> fileNames; 

    public Page() 
    { 
     InitializeComponent(); 
     DropList.ItemsSource = fileNames; 
    } 

     private void DeleteAttachment_MouseLeftButtonDown(object sender, MouseButtonEventArgs) { 
     fileNames.Remove(); 
    } 

ответ

1

Попробуйте это:

XAML:

<Controls:MetroWindow 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls" 
        xmlns:local="clr-namespace:MahApps.Metro.Application24" 
        x:Class="MahApps.Metro.Application24.MainWindow" 
        BorderBrush="{StaticResource AccentColorBrush}" 
        BorderThickness="2" 
        Title="MainWindow" 
        Height="300" 
        Width="300"> 

<Grid> 
    <ListView x:Name="list1" ItemsSource="{Binding Data}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Rectangle Height="15" Width="15" VerticalAlignment="Center" MouseLeftButtonDown="r1_MouseLeftButtonDown"> 
         <Rectangle.Fill> 
          <VisualBrush Visual="{StaticResource appbar_checkmark_cross}" /> 
         </Rectangle.Fill> 
        </Rectangle> 
        <TextBlock Text="{Binding}" Padding="5,5,5,5" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</Grid> 

MainWindow:

public partial class MainWindow : MetroWindow 
{ 
    MyViewModel vm; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     vm = new MyViewModel(); 
     DataContext = vm; 
    } 

    private void r1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     Rectangle r = sender as Rectangle; 
     vm.Data.Remove(r.DataContext.ToString()); 
    } 
} 

ViewModel:

public class MyViewModel 
{ 
    public ObservableCollection<string> Data { get; set; } 

    public MyViewModel() 
    { 
     Data = new ObservableCollection<string> 
     { 
      "Item 1", 
      "Item 2", 
      "Item 3", 
      "Item 4", 
      "Item 5" 
     }; 
    } 
} 

enter image description here

+0

Спасибо большое за ответ, это действительно меня на правильном пути :) После нескольких часов Я надеялся, что кто-то поможет, и 6 минут назад я собирался проверить стек перед сном и vi ola :) –

+0

Извините, что я не мог продвинуться раньше, но теперь это сработало, когда я разблокировал «следующий уровень» :) –

+0

Спасибо, сэр! – jsanalytics