我目前正在使用Caliburn,我有以下情况。
我有一个MultiPresenterManager,并且CurrentPresenter设置为包含Canvas的Presenter。在Canvas Presenter View中,我有一个内容绑定的ContentControl({Binding Canvas}),然后是为ContentControl挂钩的caliburn事件。
我希望能够在画布上移动对象。
我需要 1.将画布绑定到视图中的某个元素 2.将事件(MouseMove,MouseDown)绑定到画布
我似乎无法正确行事。
有没有人有想法?
答案 0 :(得分:4)
我会推荐一种非常不同的方法,我相信它会有你想要的相同目的,但会从你的视图模型中删除任何特定于控件的逻辑。
首先,我们需要一个表示画布上对象的逻辑视图模型。让我们假装它的国家和画布是一张地图。也许vm看起来像这样:
public class Country : PropertyChangedBase {
public string Name {get;set;}
public double X {get;set;}
public double Y {get;set;}
}
为简单起见,我省略了INPC位。接下来,我们的主视图模型(您问题中的Presenter)可能如下所示:
public class Map : PropertyChangedBase {
public ObservableCollection<Country> Countries {get;set;}
}
我们将在Canvas上为每个国家/地区添加一个红点。如果是这样,那么您的相应XAML可能如下所示(省略根元素):
<ItemsControl ItemsSource="{Binding Countries}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Ellipse Fill="Red"
Width="16"
Height="16"
Canvas.Top="{Binding Y}"
Canvas.Left="{Binding X}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
如果您需要处理事件,只需照常将它们连接到XAML中。