您好,我想写一些仪表板。您应该能够从某些来源拖动仪表板上的小部件。小部件的布局应该是免费的(首先是Canvas,后来是一些自己的Panel)。
我的问题:
答案 0 :(得分:2)
我会为所有小部件制作一个BaseClass
,然后为每个小部件构建一个继承自ViewModel
的{{1}},并使用BaseClass
来构建View
之后,我会在主应用程序ViewModel
中使用ObservableCollection<WidgetBaseViewModel> OpenWidgets
,并将其绑定到ViewModel
。
ItemsControl
将ItemsControl
设置为ItemsPanelTemplate
,每个Canvas
将包含WidgetBaseViewModel
,Top
,{{ 1}}和Left
属性。
显示每个Widget的实际用户界面将基于Height
,可能是您想要的任何内容,尽管Width
最简单
DataTemplate
此外,您需要将UserControl
/ <ItemsControl ItemsSource="{Binding OpenWidgets}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type local:WidgetAViewModel}">
<local:WidgetAView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:WidgetBViewModel}">
<local:WidgetBView />
</DataTemplate>
</ItemsControl.Resources>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Canvas ... />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
绑定在Canvas.Top
而不是实际的Canvas.Left
上,以使其在画布中正确显示。