diff --git a/FileManager_UWP/Controls/LabelListControl.cs b/FileManager_UWP/Controls/LabelListControl.cs
index 22a6c13..68ec1e2 100644
--- a/FileManager_UWP/Controls/LabelListControl.cs
+++ b/FileManager_UWP/Controls/LabelListControl.cs
@@ -1,4 +1,5 @@
using FileManager_UWP.Model;
+using GalaSoft.MvvmLight.Command;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -18,11 +19,22 @@ using Windows.UI.Xaml.Media.Animation;
// The Templated Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234235
namespace FileManager_UWP.Controls {
+ public class LabelListChangeEvent {
+ public enum EventType { Add, Remove };
+
+ public LabelListControl LabelListControl;
+ public EventType eventType;
+ public LabelItem label;
+ }
+
///
/// 一个可以自动折叠的标签菜单
///
public class LabelListControl: ItemsControl {
+ // public delegate void OnLabelChanged(LabelItem item);
+ public RelayCommand OnAddLabel = null, OnRemoveLabel = null;
+
//private int _collpse_distance = 22;
//private List _expanded_position = new List();
private Storyboard _collpse_story_board = new Storyboard();
@@ -205,8 +217,14 @@ namespace FileManager_UWP.Controls {
Debug.WriteLine("Manipulation finish");
_draging = false;
ObservableCollection itemsSource = ItemsSource as ObservableCollection;
- itemsSource.Remove((sender as Button).GetValue(LabelProperty) as LabelItem);
+ var toRemove = (sender as Button).GetValue(LabelProperty) as LabelItem;
+ itemsSource.Remove(toRemove);
update();
+ OnRemoveLabel?.Execute(new LabelListChangeEvent {
+ label = toRemove,
+ LabelListControl = this,
+ eventType = LabelListChangeEvent.EventType.Remove
+ });
}
private void B_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) {
@@ -255,10 +273,17 @@ namespace FileManager_UWP.Controls {
private void TextBox_LostFocus(object sender, RoutedEventArgs e) {
_adding_new_label = false;
TextBox tb = sender as TextBox;
+ var NewLabel = new LabelItem(tb.Text);
if (tb.Text.Count() != 0)
- (ItemsSource as ObservableCollection).Add(new LabelItem(tb.Text));
+ (ItemsSource as ObservableCollection).Add(NewLabel);
if (!_hovering)
LabelListCanvas_PointerExited(null, null);
+ // 调用回调函数
+ OnAddLabel?.Execute(new LabelListChangeEvent {
+ label = NewLabel,
+ LabelListControl = this,
+ eventType = LabelListChangeEvent.EventType.Add
+ });
}
private void TextBox_GotFocus(object sender, RoutedEventArgs e) {
diff --git a/FileManager_UWP/View/FileListView.xaml.cs b/FileManager_UWP/View/FileListView.xaml.cs
index f9e2515..49682a2 100644
--- a/FileManager_UWP/View/FileListView.xaml.cs
+++ b/FileManager_UWP/View/FileListView.xaml.cs
@@ -54,13 +54,16 @@ namespace FileManager_UWP.View {
LabelListControl labels = new LabelListControl();
labels.ItemsSource = displayFileItem.Labels;
- labels.Padding = new Windows.UI.Xaml.Thickness(0, -50, 0, 0);
+ // labels.Padding = new Windows.UI.Xaml.Thickness(0, -50, 0, 0);
+ labels.SetValue(LabelListControl.TagProperty, displayFileItem.Path);
+ labels.OnRemoveLabel = vm.LabelRemoveCommand;
+ labels.OnAddLabel = vm.LabelAddCommand;
+
sp.Children.Add(Icon);
sp.Children.Add(Name);
sp.Children.Add(labels);
MicroShitList.Items.Add(sp);
-
}
}
}
diff --git a/FileManager_UWP/ViewModel/FileListViewModel.cs b/FileManager_UWP/ViewModel/FileListViewModel.cs
index f9f9ef5..3497861 100644
--- a/FileManager_UWP/ViewModel/FileListViewModel.cs
+++ b/FileManager_UWP/ViewModel/FileListViewModel.cs
@@ -1,4 +1,5 @@
-using FileManager_UWP.Model;
+using FileManager_UWP.Controls;
+using FileManager_UWP.Model;
using FileManager_UWP.Service;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
@@ -119,5 +120,27 @@ namespace FileManager_UWP.ViewModel {
// pvm.Path = i.Path;
pvm.ShowPreviewCommand.Execute(i.Path);
}));
+
+ private RelayCommand _labelRemoveCommand;
+ public RelayCommand LabelRemoveCommand =>
+ _labelRemoveCommand ?? (_labelRemoveCommand =
+ new RelayCommand(
+ (LabelListChangeEvent e) => {
+ string path = e.LabelListControl.GetValue(LabelListControl.TagProperty) as string;
+ LabelItem label = e.label;
+ Debug.WriteLine("remove " + path + " " + label.tag);
+ })
+ );
+
+ private RelayCommand _labelAddCommand;
+ public RelayCommand LabelAddCommand =>
+ _labelAddCommand ?? (_labelAddCommand =
+ new RelayCommand(
+ (LabelListChangeEvent e) => {
+ string path = e.LabelListControl.GetValue(LabelListControl.TagProperty) as string;
+ LabelItem label = e.label;
+ Debug.WriteLine("add " + path + " " + label.tag);
+ })
+ );
}
}