0
我有一个silverlight应用程序,它显示道路上的汽车位置。XAML绑定动态创建的控件
我使用MVVM模式,所以我有一个MapPosition集合到我的viewmodel中。
我也使用外部SDK(来自ArcGIS)来执行我的绘图,所以限制是我需要绘制一个包含TemplateControl的Symbol对象,在该对象中我可以放置任何我想要的东西。
问题是我没有找到一种方法来绑定一个MapPosition对象(基本上只包含坐标和一些额外的信息)到模板,我真的很糟糕,因为我有一些属性,我真的需要绑定,例如改变图标的角度并显示工具提示。
这是我发现让它工作,但我真的不喜欢它的唯一途径:
MarkerSymbol symbol = new MarkerSymbol();
string xamlTemplate = String.Format(@"
<ControlTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" >
<Grid Width=""200"" Height=""200"">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX=""0.1"" ScaleY=""0.1"" />
<RotateTransform Angle=""{0}"" CenterX=""10"" CenterY=""10"" />
</TransformGroup>
</Grid.RenderTransform>
<Canvas VerticalAlignment=""Top"" HorizontalAlignment=""Center"">
<ToolTipService.ToolTip>
<ToolTip Content=""{1}""></ToolTip>
</ToolTipService.ToolTip>
<Canvas.RenderTransform>
<TranslateTransform X=""-50""/>
</Canvas.RenderTransform>
<Path Data=""F1 M 49.75,0L 0,200L 50,158.5L 100,200L 49.75,0 Z"" Fill=""#FF008F00"" Stroke=""Black""></Path>
</Canvas>
</Grid>
</ControlTemplate>", value.Course, value.ToolTip);
ControlTemplate template = new ControlTemplate();
boatSymbol.ControlTemplate = (ControlTemplate)XamlReader.Load(xamlTemplate);
然后我环在我的列表中的每个元素和动态创建的模板。
所以问题是:在我的集合的每个对象上绑定模板的正确方法是什么,并且在xaml中有模板而不是在我的代码隐藏中有一个丑陋的字符串?
非常感谢您的帮助!
嗨,谢谢你的回答!但问题是如何为每个模板设置适当的数据上下文。使用list和DataTemplate很容易,因为你指定了ItemsSource,但是如果我通过在我的集合上循环来在代码中创建我的项目,它会工作吗? –