2011-09-05 106 views
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中有模板而不是在我的代碼隱藏中有一個醜陋的字符串?

非常感謝您的幫助!

回答

0

<BoatSymbol.ControlTemplate> 
    <ControlTemplate> 
      <Grid Width="200" Height="200"> 
       <Grid.RenderTransform> 
        <TransformGroup> 
         <ScaleTransform ScaleX="0.1" ScaleY="0.1" /> 
         <RotateTransform Angle="{Binding Angle}" CenterX="10" CenterY="10" /> 
        </TransformGroup> 
       </Grid.RenderTransform> 
       <Canvas VerticalAlignment="Top" HorizontalAlignment="Center"> 
        <ToolTipService.ToolTip> 
         <ToolTip Content="{Binding Course}"></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> 
</BoatSymbol.ControlTemplate> 

假設BoatSymbol的DataContext設置爲適當的視圖模型。

+0

嗨,謝謝你的回答!但問題是如何爲每個模板設置適當的數據上下文。使用list和DataTemplate很容易,因爲你指定了ItemsSource,但是如果我通過在我的集合上循環來在代碼中創建我的項目,它會工作嗎? –