Wpf 在地图上放置符号集合的正确MVVM方法是什么?
我有一个带有画布的WPF窗口,用于显示地形图。我想根据Wpf 在地图上放置符号集合的正确MVVM方法是什么?,wpf,mvvm,Wpf,Mvvm,我有一个带有画布的WPF窗口,用于显示地形图。我想根据IEnumerable在该地图上放置符号,其中MapSymbolDefinition定义如下: public class MapSymbolDefinition { string SymbolFileName { get; set; } int XLocation { get; set; } int YLocation { get; set; } } 所有符号都存储在我的项目的symbols文件夹中,因此任何符号的路径都是[Pr
IEnumerable
在该地图上放置符号,其中MapSymbolDefinition
定义如下:
public class MapSymbolDefinition
{
string SymbolFileName { get; set; }
int XLocation { get; set; }
int YLocation { get; set; }
}
所有符号都存储在我的项目的symbols文件夹中,因此任何符号的路径都是[ProjectFolder]/symbols/SymbolFileName.bmp
有没有想过如何设置它,这样我就不必在代码隐藏中手动填充一堆图像对象
谢谢。WPF方式:使用数据模板、列表框、转换器和。。。。退房
快速方法:只需在代码隐藏中执行此操作,并将您的视图称为控件。使用带有自定义
ItemsPanel
、itemscontainerstyle
和itemstemplate
的ItemsControl
:
<ItemsControl ItemsSource="{Binding MapSymbols}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Top" Value="{Binding YLocation}"/>
<Setter Property="Canvas.Left" Value="{Binding XLocation}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type local:MapSymbolDefinition}">
<Image Source="{Binding SymbolFileName, Converter={StaticResource ImageNameConverter}}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
评论后更新:您可以定义一个
项目模板
,为集合中的每个项目提供可视化树。在本例中,我使用转换器将SymbolFileName
属性转换为图像,但您也可以在MapSymbolDefinition
类上定义一个单独的属性,以生成完整路径。后一种方法更符合MVVM最佳实践。嗨,肯特。我刚刚编辑了我的问题,因为我认为有一点不清楚:枚举实际上包含地图符号的定义(而不是符号本身)。因此,在您的示例中,ItemsSource没有绑定到我要显示的实际图像对象。有没有什么方法可以包含一个从SymbolFileName转换为的数据模板,或者换句话说,@sixlettvariables所说的:)@DanThMan:实际上代码看起来很完美(不说绑定)<您只需要数据模板中的code>
。Kent处理的令人困惑的部分是让ItemContainerStyle
执行Canvas
偏移。