From fb72350f9a0b0b75bcb267b19b07d843f80dee37 Mon Sep 17 00:00:00 2001 From: w-mj Date: Mon, 20 May 2019 21:54:07 +0800 Subject: [PATCH] command on label list control --- FileManager_UWP/Controls/LabelListControl.cs | 29 +++++++++++++++++-- FileManager_UWP/View/FileListView.xaml.cs | 7 +++-- .../ViewModel/FileListViewModel.cs | 25 +++++++++++++++- 3 files changed, 56 insertions(+), 5 deletions(-) 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); + }) + ); } }