2011-02-10 72 views
2

我目前使用Caliburn,并且出现以下情况。在Caliburn中绑定画布

我有一个MultiPresenterManager并且CurrentPresenter设置为包含Canvas的Presenter。在Canvas Presenter视图中,我有一个带有内容绑定({Binding Canvas})的ContentControl,然后校准了ContentControl的事件。

我希望能够在画布上移动物体。

我需要 1.绑定画布的一些元素在视图 2.绑定的事件(MouseMove事件,的MouseDown)到画布

我似乎无法得到这个行为的权利。

有没有人有一些想法?

回答

4

我会推荐一个非常不同的方法,我相信会有相同的目标结束,但会从您的视图模型中删除任何控制特定的逻辑。

首先,我们需要一个逻辑视图模型来表示画布上的对象。假设它是国家,画布是地图。也许虚拟主机看起来像这样:

public class Country : PropertyChangedBase { 
    public string Name {get;set;} 
    public double X {get;set;} 
    public double Y {get;set;} 
} 

为简单起见,我省略了INPC位。接下来,我们的主视图模型(演示从你的问题),可能是这样的:

public class Map : PropertyChangedBase { 
    public ObservableCollection<Country> Countries {get;set;}  
} 

我们会在一个红点在画布上的每一个国家。如果是这样,那么你的相应的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正常。