如何使用XAML DataGrid解析数据源返回中的节点?

时间:2015-07-23 15:01:17

标签: xml web-services xaml binding datagrid

我从一个证明难以绑定到我的DataGrid的网络服务中得到奇怪的回报。 以下是从webservice返回的内容:

<new0Collection>
<new0Item>
    <ORNO>0010121825</ORNO>
    <!-- xml data that is encoded -->
    <PONR>&lt;OBPONR&gt;1&lt;/OBPONR&gt;&lt;OBPONR&gt;2&lt;/OBPONR&gt;&lt;OBPONR&gt;3&lt;/OBPONR&gt;</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

enter image description here

虽然看起来像这样:

enter image description here

(此DataGrid有效,因为数据未从Web服务返回)

是否有更好的格式化网络服务数据的方法,还是我可以使用绑定技巧?

0 个答案:

没有答案