【发布时间】:2010-12-07 15:12:11
【问题描述】:
我有一个窗口,里面有一个简单的框架元素(我们称之为“myFrame”)。在 Window.Loaded 中,我正在使用 XamlReader.Parse(string) 解析一个字符串变量(从外部源加载),结果是一个 Page 对象(本地变量称为“myPage”)。我正在设置 myFrame.Content = myPage。
页面内部是一个标签,如下所示:
<label Name="DataBindingTestLabel" Content="{Binding Path=TestLabel, TargetNullValue='Null value'}" />
我正在尝试提供一个匿名类型(以便于测试)作为框架的数据上下文,例如:
this.ContentFrame.DataContext = new { TestLabel = "Hello, world." };
我已验证 DataContext 属性在设置后具有该值,并且只要我可以逐步执行窗口的执行,该值就会保持该值,但该值在窗口呈现之前的某个时间丢失并且回退值“Null”值,”显示出来。
启用数据绑定跟踪后,visual studio中的输出窗口显示:
System.Windows.Data 信息:41:BindingExpression 路径错误:找不到“对象”的“TestLabel”属性,因为数据项为空。这可能是因为数据提供者尚未生成任何数据。绑定表达式:路径=测试标签;数据项=空;目标元素是“标签”(名称=“DataBindingTestLabel”);目标属性是“内容”(类型“对象”)
非常感谢任何对我做错的事情的见解。
【问题讨论】:
-
肯定有更多的事情发生。我无法在仅使用您显示的标签并将 DataContext 设置为匿名类型的项目中重现。
-
我同意。 @Merick:你在使用动态 xaml 吗?
-
Smith - 我不确定动态 xaml 是什么意思。你的意思是你在运行时用 C# 代码而不是 xaml 创建 WPF 对象?
-
没错。使用 XamlReader.Parse() 方法,我获取一个 xaml 字符串并从中创建一个控制树。
-
我使用 XamlReader.Parse(...) 尝试了另一个测试,但它仍然成功。我最好的猜测是,动态 xaml 和匿名类型都不是问题,问题出在其他地方。
标签: c# .net wpf binding datacontext