在Caliburn中绑定画布

时间:2011-02-10 11:45:11

标签: wpf caliburn

我目前正在使用Caliburn,我有以下情况。

我有一个MultiPresenterManager,并且CurrentPresenter设置为包含Canvas的Presenter。在Canvas Presenter View中,我有一个内容绑定的ContentControl({Binding Canvas}),然后是为ContentControl挂钩的caliburn事件。

我希望能够在画布上移动对象。

我需要 1.将画布绑定到视图中的某个元素 2.将事件(MouseMove,MouseDown)绑定到画布

我似乎无法正确行事。

有没有人有想法?

1 个答案:

答案 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中。

相关问题