【问题标题】:Issues with data binding while working with WPF使用 WPF 时的数据绑定问题
【发布时间】:2014-06-11 23:02:07
【问题描述】:

我一直在努力学习 Visaul C#。最近,我一直专注于 WPF。这是我一直在研究的教程的链接:

http://msdn.microsoft.com/en-us/library/vstudio/ms752299(v=vs.110).aspx

如果您选择某人的姓名并单击“查看”按钮,该应用程序应允许您查看某人的费用。不幸的是,费用没有显示。我不断收到此错误消息:

System.Windows.Data Error: 50 : XmlDataProvider has inline XML that does not explicitly set its XmlNamespace (xmlns="").

我认为 xmlns 需要留空,以便应用程序可以向下导航 XAML。这是我制作的 Grid 资源的代码:

<Grid.Resources>
            <!-- Expense Report Data -->
            <XmlDataProvider x:Key="ExpenseDataSource" XPath="Expenses">
                <x:XData>
                    <Expenses xmlns="">
                        <Person Name="Mike" Department="Legal">
                            <Expense ExpenseType="Lunch" ExpenseAmount="50" />
                            <Expense ExpenseType="Transportation" ExpenseAmount="50" />
                        </Person>
                        <Person Name="Lisa" Department="Marketing">
                            <Expense ExpenseType="Document Printing" ExpenseAmount="50" />
                            <Expense ExpenseType="Gift" ExpenseAmount="125" />
                        </Person>
                        <Person Name="John" Department="Engineering">
                            <Expense ExpenseType="Magazine Subscription" ExpenseAmount="50" />
                            <Expense ExpenseType="New Machine" ExpenseAmount="600" />
                            <Expense ExpenseType="Software" ExpenseAmount="500" />
                        </Person>
                        <Person Name="Mary" Department="Finance">
                            <Expense ExpenseType="Dinner" ExpenseAmount="100" />
                        </Person>
                    </Expenses>
                </x:XData>
            </XmlDataProvider>

            <!-- Name item template -->
            <DataTemplate x:Key="nameItemTemplate">
                <Label Content="{Binding XPath=@Name}"/>
            </DataTemplate>

</Grid.Resources>

谁能给我任何关于出了什么问题的提示?

谢谢

【问题讨论】:

  • 您需要使用 XmlNamespaceManager。来自 WPF 4.5 Unleashed 一书“只要 XPath 值没有前缀,空的命名空间就被假定为命名空间 URI。因此,即使您的 XML 源具有默认命名空间,您也必须分配一个 XmlNamespaceManager 才能使查询工作”。

标签: c# wpf xaml


【解决方案1】:

原来问题不在于 Grid 资源!我忘记在 DataGrid 中设置 ItemsSource。在我的 ExpenseReportPage.xaml 文件中,我输入了以下内容:

<Grid Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2" VerticalAlignment="Top"
                  HorizontalAlignment="Left">
                <!-- Expense type and Amount table -->
                <DataGrid ItemsSource="{Binding XPath=Expense}" ColumnHeaderStyle="{StaticResource columnHeaderStyle}" 
                          AutoGenerateColumns="False" RowHeaderWidth="0">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Expense Type" Binding="{Binding XPath=@ExpenseType}" />
                        <DataGridTextColumn Header="Amount" Binding="{Binding XPath=@ExpenseAmount}"/>
                    </DataGrid.Columns>
                </DataGrid>
</Grid>

设置ItemsSource后,数据显示正常。

【讨论】:

    【解决方案2】:

    在 WPF 4.5 Unleashed 一书中,他(Adam Nathan)给出了这样的示例。 xml:

    <rss version = "2.0" xmlns:georss="http://www.gearss.org/georss">...</rss>
    

    xaml:

    <XmlDataProvider Source=http://api.twitter.com/1/statuses/user_timeline.rss?screen_name/adamnathan"
    XmlNameSpaceManager="{StaticResource namespaceMapping}" XPath="rss/channel" x:Key="dataProvider" />
    
    <XmllNamespaceMappingCollection x:Key="namespaceMapping">
        <XmlNamespaceMapping Uri="http://www.gearss.org/georss" Prefix="georss" />
    </XmllNamespaceMappingCollection>
    

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多