同步itemscontrol中项目的位置

时间:2015-02-10 10:36:23

标签: wpf itemscontrol

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

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

Vertical Swimlanes

以下是ISkill界面。

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

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

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

1 个答案:

答案 0 :(得分:1)

我的建议是创建一个代表此视图中项目的专用视图模型。这些视图模型的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; } 
 }