小编tma*_*man的帖子

在 WPF 应用程序中应用 MVVM 模式

我正在制作一个简单的 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 如果我的描述/问题含糊不清/抽象,请告诉我。

c# wpf xaml mvvm

5
推荐指数
1
解决办法
2637
查看次数

标签 统计

c# ×1

mvvm ×1

wpf ×1

xaml ×1