我正在使用 MVVM 模式开发 WPF 应用程序。在我的应用程序中,我有一个应该显示几种不同形状的画布。这些形状描述了一个仓库(又名存储)和仓库内容。
要仅显示仓库(由 a 描述ObservableCollection<Point>
),我使用以下代码片段
<Canvas Width="{Binding StorageWidth, Mode=OneWay}" Height="{Binding StorageHeight, Mode=OneWay}">
<Polygon Points="{Binding StorageVertices, Mode=OneWay, Converter={StaticResource PointCollectionConverter}}" Stroke="Gray" StrokeThickness="30">
<Polygon.Fill>
<SolidColorBrush Color="DarkRed" Opacity="0.25" />
</Polygon.Fill>
</Polygon>
</Canvas>
在此画布上,我想添加矩形(用于描述存储中的办公室)和圆形(用于描述存储中的节点)。这些在我的视图模型中定义:
class Node
{
// ...
Point Position { get; private set; }
}
class Office
{
// ...
ObservableCollection<Point> Vertices { get; private set; }
}
public class ViewModel : ViewModelBase
{
// ...
ObservableCollection<Node> Nodes { get; private set; }
ObservableCollection<Office> Offices { get; private set; }
ObservableCollection<Point> StorageVertices { get; private set; } // Already displayed on the canvas
}
如何使用数据绑定在画布上显示这些以及存储区域?我知道我可以ItemsControl
正常使用,但现在我有几个不同的集合/来源,它们应该以不同的方式描述(Node
s 是Circle
s 而Office
s 是Rectangle
s)。