我一直在尝试将新生成的图像的source、row和column属性绑定到视图模型中某个对象的某个值上,理想情况下,可以通过绑定传递给eventArgs的对象属性来解决这个问题,有办法吗?
下面是我想做的一个例子:
private void OnNewEnemy(EnemyViewModel enemyViewModel)
{
Image Enemy = new Image()
{
Stretch = Stretch.Fill
};
Enemy.SetBinding(Image.SourceProperty, new Binding("enemyViewModel.Icon"));
Enemy.SetBinding(Grid.RowProperty, new Binding("enemyViewModel.Row"));
Enemy.SetBinding(Grid.ColumnProperty, new Binding("enemyViewModel.Column"));
locationGrid.Children.Add(Enemy);
}
我一直在考虑使用语法new Binding("property. subproperty"),但是,由于我的"enemyViewModel"对象经常被添加到视图模型的列表中或从列表中删除,所以这个方法似乎不起作用。
我也意识到在代码后面编写代码是不好的做法,但这似乎是从GUI中动态添加和删除图像的唯一方法。
谢谢你的建议。
2条答案
按热度按时间qni6mghb1#
你可以写
或
但是,您应该考虑使用一个ItemsControl,它使用网格作为其
ItemsPanel
,并且在其ItemTemplate
和ItemContainerStyle
中具有图像和绑定。在下面的示例中,
Enemies
将是主视图模型中ObservableCollection<EnemyViewModel>
类型的公共属性。另请参见Data Templating Overview。
ee7vknir2#
您可以在资源字典中定义样式,以将这些设置应用于Image。
这是我制作的一个PoC,我在我的项目中添加了一个Skull.png(用于敌人的图片),并将其设置为资源。
EnemyViewModel有硬编码的值,但当然要设置它们。
你可以在你的代码中把datacontext设置为你的enemyviewmodel参数,但是这里我只是在我的主窗口中新建一个,这是非常快速和肮脏的。
比起png,我更倾向于使用路径或者画笔和几何图形。我的头骨有点普通,可能不适合路径,因为你只能得到一种颜色的填充和另一种颜色的轮廓。
这可能是这样的:
在我的资源字典里我有。
风格
视图模型