将画布上的图像绑定到MVVM中的ObservableCollection(通过DataTemplates?)

时间:2015-12-05 13:13:07

标签: c# wpf canvas mvvm tile

我想在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中的运作方式吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

只需提示几点:要显示ObservableCollection中显示的对象,您需要ItemsControl。要使ItemsControl使用Canvas作为基础面板,请将其设置为ItemsPanel property。假设代表图块的ObservableCollection项提供了三个属性PathXY,这看起来有点像:

<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控件)。

我建议您尝试与这里相处,如果遇到特定问题,请提出另一个更详细的问题!