我从一个证明难以绑定到我的DataGrid
的网络服务中得到奇怪的回报。
以下是从webservice返回的内容:
<new0Collection>
<new0Item>
<ORNO>0010121825</ORNO>
<!-- xml data that is encoded -->
<PONR><OBPONR>1</OBPONR><OBPONR>2</OBPONR><OBPONR>3</OBPONR></PONR>
</new0Item>
我们的系统存在一个限制,我们必须对嵌套节点进行编码。我们要做的事实上是一个列表中的列表,我已经能够在DataList
中使用RowTemplate
。用户在DataGrid
中选择一行,并显示相关项的子列表。
<DataGrid Name="ProdLines_List3" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ItemsSource="{Binding new0Collection}" RowDetailsVisibilityMode="{Binding ElementName=ExpandRows_Txt,Path=Text,Mode=OneWay}" Style="{DynamicResource styleDataGrid}" HeadersVisibility="All" AutoGenerateColumns="False" RowHeaderWidth="0" CanUserSortColumns="True" CanUserResizeRows="False" CanUserAddRows="False" CanUserDeleteRows="False" VerticalGridLinesBrush="#50E5E5E5" HorizontalGridLinesBrush="#50E5E5E5" HorizontalContentAlignment="Center" RowHeight="25" Height="Auto" Width="Auto" Grid.Row="1" Grid.Column="0">
<DataGrid.Resources>
<DataTemplate x:Key="ExpanderBt">
<StackPanel Orientation="Horizontal">
<CheckBox x:Name="ExpandRows_Check" Content="Row Mode:" IsChecked="{x:Null}" IsThreeState="True" Margin="5" FontSize="14" />
<TextBox x:Name="ExpandRows_Txt" Text="{Binding ElementName=ProdLines_List,Path=RowDetailsVisibilityMode,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
</DataTemplate>
</DataGrid.Resources>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<ListBox x:Name="Operations_ListBox" ItemsSource="{Binding PONR}" Width="Auto" VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="20,0,0,0" MaxHeight="200">
<ListBox.ItemTemplate>
<DataTemplate x:Name="Operations_Items">
<DockPanel x:Name="ItemDockPanel" Background="#C5C5C5">
<TextBlock x:Name="VOOPNO_Txt" Text="{Binding}" Margin="3,3,3,3" VerticalAlignment="Center" HorizontalAlignment="Left" DockPanel.Dock="Left" />
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
<DataGrid.Columns>
<DataGridTextColumn Header="Order" Binding="{Binding ORNO}" />
<DataGridTextColumn Header="Line" Binding="{Binding PONR}" />
</DataGrid.Columns>
</DataGrid>
您可以看到PONR节点实际上显示为XML代码,我得到的是每个字符在我的行模板中显示为ListBoxItem
。
虽然看起来像这样:
(此DataGrid
有效,因为数据未从Web服务返回)
是否有更好的格式化网络服务数据的方法,还是我可以使用绑定技巧?