【发布时间】:2009-04-03 07:22:17
【问题描述】:
我在使用 DataBinding 时遇到运行时错误,这让我发疯。我已经定义了一个简单的 UserControl,我们称之为 SillyControl。另外,我有一个收藏
ObservableCollection<MyClass> myObjects;
还有一个名为 SillyListBox 的 ListBox,它通过以下方式绑定到此 ObservableCollection:SillyListBox.ItemsSource = myObjects; ListBox 在 XAML 中的定义如下:
<ListBox x:Name="SillyListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<MyControls:SillyControl TestString="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
因此,每当将对象添加到集合 myObjects 时,都应将新的 SillyControl 添加到 ListBox,并且该 SillyControl 的属性 TestString 应绑定到 MyClass 对象的 Name 属性它代表。
这不起作用。它编译得很好,但是当我运行程序时,它给了我一个令人讨厌的运行时错误 - System.Windows.Markup.XamlParseException 并且在下面显示 AG_E_PARSER_BAD_PROPERTY_VALUE。
现在,如果我只是删除 Binding,给 TestString 一个固定值,例如,错误消失。我也可以定义一个 TextBlock 控件而不是 SillyControl 并在其上成功使用绑定。究竟是什么导致了这种情况发生?
更新:根据要求,以下是 SillyControl 的定义方式:
public partial class SillyControl : UserControl
{
private string testString;
public string TestString
{
get { return testString; }
set { testString = value; }
}
public SillyControl()
{
InitializeComponent();
}
}
XAML 是真正的准系统。我使用的是默认的 XAML,所以它只不过是一个空的 Grid。
更新 2:我创建了一个 very simple test project 供下载,它重现了问题。
【问题讨论】:
-
我们需要了解更多关于 SillyControl 的信息。 Xaml 解析器在控件上找不到名为 TestString 的属性。
-
感谢您的反馈。我已经更新了问题。
标签: c# silverlight data-binding xaml