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,但是如果我通過在我的集合上循環來在代碼中創建我的項目,它會工作嗎? –