using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using DTS.Common.Controls; using DTS.Common.Interface.ISO.ExtraProperties; using DTS.Common.Utils; namespace ExtraProperties { /// /// Interaction logic for ExtraPropertiesListView.xaml /// public partial class ExtraPropertiesListView : IExtraPropertiesListView { public ExtraPropertiesListView() { InitializeComponent(); } private void GridViewColumnHeaderSearchable_OnSearch(object sender, RoutedEventArgs e) { var searchTerm = (string)e.OriginalSource; var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag; var viewModel = (IExtraPropertiesListViewModel)DataContext; viewModel.Filter(columnTag, searchTerm); } private void GridViewColumnHeader_OnClick(object sender, RoutedEventArgs e) { var vm = (IExtraPropertiesListViewModel)DataContext; var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag ?? Utils.FindChild((DependencyObject)e.OriginalSource, null)?.Tag; vm?.Sort(columnTag, true); } private void ExtraPropertyKeyTextBox_KeyDown(object sender, KeyEventArgs e) { if (!(DataContext is ExtraPropertiesListViewModel vm)) { return; } if (!(((System.Windows.Controls.Control)e.Source).DataContext is IExtraProperty iep)) { return; } vm.MarkModified(iep); } private void ExtraPropertyKeyTextBox_TextChanged(object sender, TextChangedEventArgs e) { if (!(DataContext is ExtraPropertiesListViewModel vm)) { return; } if (!(e.Source is TextBox textBox)) { return; } if (!(textBox.DataContext is IExtraProperty iep)) { return; } vm.MarkModified(iep); var notUsed1 = new List(); var notUsed2 = new List(); vm.Validate(ref notUsed1, ref notUsed2); } private void ExtraProperties_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!(DataContext is ExtraPropertiesListViewModel vm)) { return; } if (!(sender is ListView lv)) { return; } var list = new List(); foreach (var item in lv.SelectedItems) { if (!(item is IExtraProperty exp)) { continue; } list.Add(exp); } vm.SetSelection(list.ToArray()); } private void ExtraPropertiesListView_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { var point = e.GetPosition(ExtraPropertiesListViewLV); //we have to do multiple hittests unfortunately, because borders and rectangles... var result = VisualTreeHelper.HitTest((UIElement)sender, point); if (null == result) { return; } if (!(result.VisualHit is UIElement element)) { return; } var result2 = ExtraPropertiesListViewLV.InputHitTest(point); if (!(result2 is UIElement element2)) { return; } //clicking on the bottom of the listview produces a scrollviewer, if we get that we can return if (element is ScrollViewer) { return; } var vm = (IExtraPropertiesListViewModel)DataContext; if (element is TextBlock tb) { if (tb.Text == ExtraProperties.Resources.StringResources.Key) { vm?.Sort(KeyColumnHeader.Tag, true); } if (tb.Text == ExtraProperties.Resources.StringResources.Value) { vm?.Sort(ValueColumnHeader.Tag, true); } return; } if (KeyColumnHeader.IsDescendantOf(element) || KeyColumnHeader.IsDescendantOf(element2)) { vm?.Sort(KeyColumnHeader.Tag, true); return; } if (ValueColumnHeader.IsDescendantOf(element) || ValueColumnHeader.IsDescendantOf(element2)) { vm?.Sort(ValueColumnHeader.Tag, true); } } private void ExtraPropertyValueTextBox_KeyDown(object sender, KeyEventArgs e) { if (!(DataContext is ExtraPropertiesListViewModel vm)) { return; } if (!(((System.Windows.Controls.Control)e.Source).DataContext is IExtraProperty iep)) { return; } vm.MarkModified(iep); } private void ExtraPropertyValueTextBox_TextChanged(object sender, TextChangedEventArgs e) { if (!(DataContext is ExtraPropertiesListViewModel vm)) { return; } if (!(e.Source is TextBox textBox)) { return; } if (!(textBox.DataContext is IExtraProperty iep)) { return; } vm.MarkModified(iep); var notUsed1 = new List(); var notUsed2 = new List(); vm.Validate(ref notUsed1, ref notUsed2); } } }