CtrEditor/PopUps/AssignImagesWindow.xaml.cs

164 lines
4.7 KiB
C#

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CtrEditor.ObjetosSim;
using CtrEditor;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Collections;
using CtrEditor.ObjetosSim.Extraccion_Datos;
using Microsoft.Xaml.Behaviors;
namespace CtrEditor.PopUps
{
/// <summary>
/// Interaction logic for AssignImagesWindow.xaml
/// </summary>
public partial class AssignImagesWindow : Window
{
public AssignImagesWindow()
{
InitializeComponent();
}
}
public partial class AssignImagesViewModel : ObservableObject
{
private MainViewModel _mainViewModel;
private Window _window;
[ObservableProperty]
private ObservableCollection<osBase> objetosSimulables;
[ObservableProperty]
private ObservableCollection<string> listaImagenes;
[ObservableProperty]
private ObservableCollection<osBase> selectedObjetosSimulables;
[ObservableProperty]
private ObservableCollection<string> selectedImagenes;
public AssignImagesViewModel() { }
public void Initialize(MainViewModel mainViewModel, Window window)
{
_mainViewModel = mainViewModel;
_window = window;
ObjetosSimulables = new ObservableCollection<osBase>(_mainViewModel.ObjetosSimulables.Where(
o => o.Enable_On_All_Pages && ((o is osExtraccionTag ex && !ex.Cloned) || (o is osBuscarCoincidencias))));
ListaImagenes = _mainViewModel.ListaImagenes;
SelectedObjetosSimulables = new ObservableCollection<osBase>();
SelectedImagenes = new ObservableCollection<string>();
}
[RelayCommand]
private void AssignImages()
{
foreach (var objeto in SelectedObjetosSimulables)
{
objeto.ShowOnThisPagesList = new List<string>(SelectedImagenes);
objeto.Show_On_This_Page = objeto.Show_On_This_Page;
}
_window.Close();
}
[RelayCommand]
private void TBSelectAll()
{
SelectedObjetosSimulables.Clear();
foreach (var obj in ObjetosSimulables)
{
SelectedObjetosSimulables.Add(obj);
}
}
[RelayCommand]
private void TBUnSelectAll()
{
SelectedObjetosSimulables.Clear();
}
[RelayCommand]
private void TBSelectAllIamges()
{
SelectedImagenes.Clear();
foreach (var img in ListaImagenes)
{
SelectedImagenes.Add(img);
}
}
[RelayCommand]
private void TBUnSelectAllImages()
{
SelectedImagenes.Clear();
}
}
public class SelectedItemsBehavior : Behavior<ListBox>
{
public IList SelectedItems
{
get { return (IList)GetValue(SelectedItemsProperty); }
set { SetValue(SelectedItemsProperty, value); }
}
public static readonly DependencyProperty SelectedItemsProperty =
DependencyProperty.Register("SelectedItems", typeof(IList), typeof(SelectedItemsBehavior), new PropertyMetadata(null, OnSelectedItemsChanged));
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.SelectionChanged += OnSelectionChanged;
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.SelectionChanged -= OnSelectionChanged;
}
private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var behavior = d as SelectedItemsBehavior;
behavior?.UpdateSelectedItems();
}
private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (SelectedItems != null)
{
foreach (var item in e.RemovedItems)
{
SelectedItems.Remove(item);
}
foreach (var item in e.AddedItems)
{
SelectedItems.Add(item);
}
}
}
private void UpdateSelectedItems()
{
if (SelectedItems != null)
{
AssociatedObject.SelectionChanged -= OnSelectionChanged;
AssociatedObject.SelectedItems.Clear();
foreach (var item in SelectedItems)
{
AssociatedObject.SelectedItems.Add(item);
}
AssociatedObject.SelectionChanged += OnSelectionChanged;
}
}
}
}