2016-09-19 106 views
1

我有一個包含這是一個拖動列表視圖拖放列表視圖,每個列表視圖項包含和圖標(這是一個MahApps X圖標)和上點擊時附加的事件在ListViewItem的/刪除ListViewItem的項目文件名。我希望每個ListViewItem都有這個x圖標,並且當用戶單擊該圖標時,它將從Listview或ObservableCollection fileNames中刪除文件名。不幸的是,在這種情況下,我不知道如何處理這個事件,我寫的代碼是錯誤的。我的問題是告訴我如何做到這一點,或向我解釋在這種情況下事件處理如何工作以及如何從發件人獲取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> 

主窗口:

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()); 
    } 
} 

視圖模型:

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