Я пытаюсь создать элемент управления WPF, который отображает два вертикальных «плавающих» (слева и справа). Как Left, так и Right должны быть привязаны к двум отдельным ObservableCollection в ViewModel. ISkill имеет свойство Name и, возможно, свойство SynchronizedWith, которое в основном является ссылкой на другой объект ISkill (в противоположной коллекции).Синхронизировать положение элементов в элементах управления
Два плавника можно рассматривать как обычные вертикальные StackPanels, но все объекты ISkill, которые синхронизированы с другим объектом ISkill, всегда должны быть выровнены по вертикали (что означает, что в некоторых местах будет пустое пространство). ISkills, синхронизированный, также должен иметь подключенную линию между двумя различными swimlanes. Прилагаемое изображение, вероятно, даст лучший обзор того, что я пытаюсь выполнить.
Ниже интерфейс ISkill.
public interface ISkill
{
string Name { get; set; }
ISkill SynchronizedWith { get; set; }
}
Одна идея, которую я имел, чтобы связать левый и правый в двух ItemsControls и использовать сетку в качестве панели макета. Но я не уверен, каким образом макет должен определить, какой Grid.Row-индекс должен иметь каждый элемент в коллекциях.
Все предложения очень ценятся, спасибо!
ИМО было бы легче также иметь 'двойной Level' свойства на интерфейсе ISkill, который служит вертикальное положение (либо непосредственно, либо преобразуются связывающим преобразователем) в Canvas, используемый в качестве ItemsPanel из в ItemsControl. – Clemens
Обе стороны должны быть всегда выровнены, например. прокручивались вместе? – igorushi
Я согласен с Клеменсом. «Уровень» можно рассчитать после применения всех ограничений к двум наборам. Каждое ограничение может быть также элементом данных и сопоставлено с визуализацией. – Nzc