我试图创建一个WPF控件,显示两个垂直"泳道" (左和右)。 Left和Right都应该在ViewModel中数据绑定到两个单独的ObservableCollection。 ISkill有一个Name属性和一个SynchronizedWith属性,它基本上是对另一个ISkill对象的引用(在相反的集合中)。
两个泳道可以看作普通的垂直StackPanels,但是与另一个ISkill对象同步的所有ISkill对象应该始终垂直对齐(这意味着在某些地方会有空的空间)。同步的ISkills也应该在两个不同的泳道之间有一条连线。附图可能会更好地展示我想要完成的事情。
以下是ISkill界面。
public interface ISkill
{
string Name { get; set; }
ISkill SynchronizedWith { get; set; }
}
我有一个想法是将Left和Right绑定到两个ItemsControls并使用Grid作为布局面板。但是我不确定布局传递应该如何确定集合中每个项目应该具有哪个Grid.Row-index。
非常感谢所有建议,谢谢!
答案 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; }
}