绑定到UserControl会导致ManagedRuntimeError

时间:2009-04-03 07:22:17

标签: c# silverlight data-binding xaml

当我使用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用于下载,可以重新创建问题。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

原来,绑定的属性必须是DependencyProperty