WPF c#后面的XMLDataprovider标签绑定代码

时间:2010-11-07 14:42:34

标签: c# wpf binding

我正在研究WPF应用程序。我用xml文件设置了多语言,我在前面的代码中使用静态资源绑定来设置相应的文本。我遇到的问题是在代码隐藏中做同样的事情。

在这里,您可以看到我如何在前面的代码中使用它:

<XmlDataProvider x:Key="Lang" Source="/lng/english.xml" XPath="WpfApplication"/>
<Label HorizontalAlignment="Center" Margin="0,10,0,5" Foreground="White" FontWeight="Bold" Content="{Binding Source={StaticResource Lang}, XPath=MenuTextClimate/@Header}"></Label>

我试图在代码隐藏中做同样的事情:

String selLangFullPath = WpfLibrary.LanguageOptions.getSelLangFullPath();
XmlDataProvider xmlData = (XmlDataProvider)(this.FindResource("Lang"));
xmlData.Source = new Uri(selLangFullPath, UriKind.Relative);
xmlData.XPath = "MenuTextClimate/@Header";
Binding NewBinding = new Binding();
NewBinding.Source = xmlData;
NewBinding.Mode = BindingMode.OneWay;
NewBinding.XPath = "MenuTextClimate";
lblTitle.SetBinding(Label.ContentProperty, NewBinding);

但由于某种原因,它似乎有效。谁能告诉我哪里出错了?

先谢谢。

1 个答案:

答案 0 :(得分:3)

你所展示的代码隐藏实际上并没有做同样的事情。它有三种不同之处:

  1. 您正在更改XmlDataProvider的Source属性
  2. 您为XmlDataProvider提供了不同的XPath(MenuTextClimate / @Hader而不是WpfApplication)。
  3. 您还在绑定表达式中提供了不同的XPath。
  4. 问题可能只是任何或所有这些事情都是错误的。 (XPath看起来特别可疑,因为它们看起来像是假设一个完全不同的XML文档结构。虽然你也提供了不同的XML文档,但也许那很好。从目前为止提供的信息中无法分辨出来。)所以我要做的第一件事就是尝试让你的C#与你的Xam完全相同 - 相同的URI和相同的XPath。如果可行的话,应该更容易看出导致问题的三种不同之处。

    或者,启用WPF调试输出。如果您使用的是.NET 3.5 sp1或更早版本,则默认情况下这通常用于数据绑定消息的错误级别日志记录。 (数据绑定错误出现在“输出”窗口中。)从.NET 4.0开始,Microsoft将其关闭,因此除非您要求,否则您将看不到它。您可以使用Visual Studio中的“选项”对话框将其打开 - 它位于“调试”下 - &gt;输出窗口。确保将数据绑定设置为显示错误。或者更详细的信息,将其一直向上,然后通过添加以下内容启用完整日志记录:

    PresentationTraceSources.SetTraceLevel(NewBinding, PresentationTraceLevel.High);
    

    这应该向您展示数据绑定试图对您的绑定做什么的完整血腥细节,这通常是找出事情不起作用的好方法。