当我使用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
时,都应该向ListBox添加一个新的SillyControl,并且该SillyControl的属性TestString
应绑定到Name
属性它代表的MyClass
对象。
这不起作用。它编译得很好,但是当我运行程序时,它给了我一个讨厌的运行时错误--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,所以它只不过是一个空格。
更新2 :我创建了一个very simple test project用于下载,可以重新创建问题。
答案 0 :(得分:1)
MyClass需要实现INotifyPropertyChanged:http://weblogs.asp.net/joelvarty/archive/2008/11/17/silverlight-databinding-the-observable-collection.aspx
答案 1 :(得分:1)
原来,绑定的属性必须是DependencyProperty
。