我正在制作一个简单的 WPF 应用程序,其中包含在画布上绘制的形状。该视图由一张地图组成,该地图在地图上不同的静态位置上有几个正方形的复杂序列。
MapView 是一个包含视图框和画布的用户控件。正方形由带有简单画布和形状(代码中的椭圆)的 UserControl 表示:
<Canvas>
<Canvas.Resources>
<BooleanToVisibilityConverter x:Key="boolToVisibility" />
</Canvas.Resources>
<Ellipse Stroke="Black" Fill="{Binding Color}" Width="{Binding Dimension}" Height="{Binding Dimension}" />
<Ellipse Stroke="Black" Fill="Black" Canvas.Top="15" Canvas.Left="15" Width="20" Height="20" Visibility="{Binding IsOccupied, Converter={StaticResource boolToVisibility}}" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)
视图显然都有一个 ViewModel(通过视图的 DataContext 属性绑定),由模型支持。
我的问题:
我地图上的 SquareViews 都有一个 mousedown 事件,每个视图都代表一个模型,我很困惑如何在我的应用程序中以优雅的方式实现它(关于 MVVM 模式)。我应该在 XAML 中预定义 SquareViews,然后生成模型,还是预先生成模型,并根据运行时对模型所做的更改动态创建视图。
如何区分SquareViews?基于(视图)模型参考?位置坐标?我想避免给每个单独的方块一个单独的名字......
将视图的 DataContext 设置为其相应视图模型的其他方法(无需使用框架),而不是将其添加到视图的代码隐藏中。
有没有更好的方法在我的地图上定位方块?(我知道画布在缩放、不同分辨率、dpi 等方面不是很灵活,但据说 viewbox 应该改进这一点,尽管我还没有完全测试过)
PS 如果我的描述/问题含糊不清/抽象,请告诉我。