使用ObservableDictionary Silverlight的适当UIElement绑定

时间:2014-12-16 19:14:20

标签: c# wpf silverlight data-binding

我在声明DataTemplate以显示KeyValuePairs的列表或网格时遇到了麻烦。当ContentTemplate声明如下时,我在后面的代码中设置以下控件的Content属性。

        <esri:InfoWindow x:Name="MyInfoWindow" IsOpen="False"
                     Padding="2"
                     CornerRadius="0" 
                     Background="White"                         
                     ContentTemplate="{StaticResource MyFeatureLayerInfoWindowTemplate}"
                     Map="{Binding ElementName=MyMap}" Content="Something">
            <esri:InfoWindow.ContentTemplate>
                <DataTemplate x:Key="MyFeatureLayerInfoWindowTemplate">
                    <sdk:DataGrid>
                        <sdk:DataGrid.Template>
                            <ControlTemplate>
                                <TextBlock Text="{Binding}" Foreground="Black" FontSize="12" />
                            </ControlTemplate>
                        </sdk:DataGrid.Template>
                    </sdk:DataGrid>
                </DataTemplate>
            </esri:InfoWindow.ContentTemplate>
        </esri:InfoWindow>

ControlTemplate中的Textblock接收Content中设置的对象就好了,但是它应该显示接收到的对象的类型。

enter image description here

我放入了一个DataGrid,因为如果我把绑定设置如下,它会以网格格式显示集合(只是关键属性),但如果我写这个,输出就会变为空。

<TextBlock Text="{Binding Path=Key}" Foreground="Black" FontSize="12" />

enter image description here

1 个答案:

答案 0 :(得分:1)

如您所见, ObservableDictionary 本身正在传递给该模板,您可以将该字典传递给某种类型的 ItemsControl

...内

<sdk:DataGrid.Template>
    <ControlTemplate>
       <TextBlock Text="{Binding}" Foreground="Black" FontSize="12" />
    </ControlTemplate>
</sdk:DataGrid.Template>

尝试类似......

<sdk:DataGrid.Template>
   <ControlTemplate>
      <ItemsControl ItemsSource="{Binding}">
         <ItemsControl.ItemTemplate>
            <DataTemplate>
               <TextBlock Text="{Binding Path=Key}" Foreground="Black" FontSize="12" />
            </DataTemplate>
         </TtemsControl.ItemTemplate>
      </ItemsControl>
    </ControlTemplate>
</sdk:DataGrid.Template>

看看它给你的东西。