将画布上的图像绑定到MVVM中的ObservableCollection(通过DataTemplates?)
本文关键字:ObservableCollection 中的 通过 DataTemplates MVVM 绑定 图像 | 更新日期: 2023-09-27 18:25:56
我想在c#中创建一个基于tilemap的游戏。(我知道mvvm和c#可能不是游戏的最佳方法,但这是我班的要求)。
我想要一个ObservableCollection of Tiles(我已经创建了一个类,它包含x和y位置以及图像本身的路径)。现在,我希望xaml文件中的Map Canvas绑定到ObservableCollection,在画布上为每个平铺显示一个图像(使用该对象的x、y和图像路径属性),这样,当我添加或删除另一个平铺时,Canvas会自动更新。我一直在寻找一个解决方案,我偶然发现了DataTemplates好几次,但我找不到任何在画布上使用这样的图像的例子。(Canvas为我提供了项目其余部分的最佳灵活性,除非完全必要,否则我不想使用GridPane)
你能给我一个在MVVM中如何工作的小例子吗?提前谢谢。
只有几个提示:要显示ObservableCollection
中表示的对象,您需要一个ItemsControl
。要使此ItemsControl
使用Canvas
作为底层面板,请设置其ItemsPanel
属性。假设代表瓦片的ObservableCollection
的项提供了三个属性Path
、X
和Y
,这看起来可能有点像以下内容:
<ItemsControl ItemsSource="{Binding ImagesCollection}">
<ItemsControl.ItemsPanel>
<Canvas />
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Path}" Canvas.Left="{Binding X}" Canvas.Top="{Binding Y}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
如前所述,ItemsPanel
定义了要用作所有项目的容器的面板。ItemTemplate
部分定义了每个项目的显示方式(在您的情况下,这将是一个简单的Image
控件)。
我建议你试着从这里开始相处,如果你遇到具体的问题,再问一个更详细的问题!