同步项目在项目控件中的位置

Synchronize position of items in itemscontrol

我正在尝试创建一个显示两个垂直 "swimlanes"(左和右)的 WPF 控件。 Left 和 Right 都应该数据绑定到 ViewModel 中的两个单独的 ObservableCollection。 ISkill 有一个 Name 属性 和一个可选的 SynchronizedWith 属性,它基本上是对另一个 ISkill 对象(在相反的集合中)的引用。

这两个泳道可以看作是普通的垂直 StackPanel,但与另一个 ISkill 对象同步的所有 ISkill 对象应始终垂直对齐(这意味着在某些地方会有空 space)。同步的 Iskills 也应该在两个不同的泳道之间有一条连接线。所附图片可能会更好地展示我正在努力完成的工作。

下面是ISkill界面。

public interface ISkill
{
    string Name { get; set; }
    ISkill SynchronizedWith { get; set; }
}

我的一个想法是将 Left 和 Right 绑定到两个 ItemsControl,并使用 Grid 作为布局面板。但是我不确定布局过程应该如何确定集合中的每个项目应该具有哪个 Grid.Row-index。

非常感谢所有建议,谢谢!

我的建议是创建一个专用的视图模型来表示此视图中的项目。这些视图模型的 ObservableCollection 应该与现有集合同步。这种方法将简化视图设计。

class SyncViewModel
{
    public ISkill RightItem { get;} 
    public ISkill LeftItem { get;}
    //simplifies binding 
    public bool HasLeftItem { return LeftItem!=null; }
    public bool HasRightItem { return RightItem!=null; } 
    public bool HasConnection { return HasLeftItem && HasRightItem; } 
 }