我想在c#中创建一个基于tilemap的游戏。 (我知道mvvm和c#可能不是游戏的最佳方法,但这对我的班级来说是必需的。)
我想要一个ObservableCollection of Tiles(我已经创建的一个类,它持有x和y位置以及图像本身的路径)。 现在我希望我的xaml文件中的Map-Canvas绑定到ObservableCollection,在Canvas上为每个单独的Tile显示一个Image(使用该对象的x,y和image-path属性),这样当我添加或者删除另一个平铺画布自动更新。 我一直在寻找一个解决方案,我偶然发现了几次DataTemplates,但我找不到在Canvas上使用像这样的图像的任何例子。 (Canvas为项目的其余部分提供了最大的灵活性,我宁愿不想使用GridPane,除非它是完全必要的)
你能给我一个小例子,说明它在MVVM中的运作方式吗? 提前谢谢。
答案 0 :(得分:1)
只需提示几点:要显示ObservableCollection
中显示的对象,您需要ItemsControl
。要使ItemsControl
使用Canvas
作为基础面板,请将其设置为ItemsPanel
property。假设代表图块的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
控件)。
我建议您尝试与这里相处,如果遇到特定问题,请提出另一个更详细的问题!