Имеется класс Action
, который представляет собой некое действие. Это действие также может содержать коллекцию вложенных действий ChildAction
.
public class Action
{
public Action Parent {get;set;}
public ObservableCollection<Action> ChildActions {get;set;}
}
Класс ProjectVM
представляет собой коллекцию действий Action
:
public class ProjectVM : BaseVM
{
public ObservableCollection<Action> Actions {get;set;}
}
В MainVM
есть свойство, которое хранит активный проект:
public class MainVM : BaseVM
{
public ProjectVM SelectedProject{get;set;}
}
В интерфейсной части ProjectVM
представлен TreeView
, а коллекция Actions
его элементами, которые можно перетаскивать и вкладывать друг в друга.
Drag&Drop реализован с помощью GongSolutions.Wpf.DragDrop.
Мне нужно знать какой элемент куда был перенесен для формирования истории изменений (Undo/Redo) в каждом ProjectVM
.
Но как в обработчиках Drag&Drop
подцепиться к SelectedProject
в рамках MVVM, которые находятся вне всей этой экосистемы и просто цепляются к контролам с помощью attached property?
<TreeView dd:DragDrop.UseDefaultDragAdorner="True"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True"
dd:DragDrop.DropHandler="{Binding ElementName=UserControl, Path=DropHandler}"
ItemsSource="{Binding Actions}" />
public class DropHandler : IDropTarget
{
//...
public void Drop(IDropInfo dropInfo)
{
//Здесь нужно взаимодействие с SelectedProject
}
}
Можно, конечно, сделать свойство SelectedProject
статическим, но что-то мне подсказывает, что это неправильно.
Может быть это вообще неправильный подход?
Воспользуйтесь мессенджером для передачи сообщений (читай - инициирование событий) между Вашими VM. В коде обработчика drop - вызываете событие, в нужной Вам модели это событие обрабатываете и сохраняете историю действий. Для этой цели можете воспользоваться event broker. Очень удобное API, позволит Вам обеспечить низкий уровень связности между классами приложения.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Используется Visual Studio 2015
Помогите разобраться с циклом и xmlЭто мой первый вопрос, я школьник, пытаюсь написать программу по созданию теста для одноклассников
Как настроить форматирование кода в VS Code под C# привык к нормальному компактному синтаксису в стиле Java, те
У меня есть файл для чтения(может быть любой)Мне нужно считывать из него определенное количество байт(к примеру 2)