Имеется класс 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, позволит Вам обеспечить низкий уровень связности между классами приложения.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Используется Visual Studio 2015
Помогите разобраться с циклом и xmlЭто мой первый вопрос, я школьник, пытаюсь написать программу по созданию теста для одноклассников
Как настроить форматирование кода в VS Code под C# привык к нормальному компактному синтаксису в стиле Java, те
У меня есть файл для чтения(может быть любой)Мне нужно считывать из него определенное количество байт(к примеру 2)