【问题标题】:Binding to a UserControl causes ManagedRuntimeError绑定到 UserControl 会导致 ManagedRuntimeError
【发布时间】: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


【解决方案1】:

【讨论】:

  • 我同意这很好,但为什么不实现该接口会导致错误。这只是意味着对属性值所做的更改将无法使其进入 UI,但它不应导致此错误
  • MyClass 在发生此错误时正在实施 INotifyProperty。我还删除了 INotifyProperty 进行了测试。两种方式都不行。
【解决方案2】:

原来绑定的属性必须是DependencyProperty

【讨论】:

    猜你喜欢
    • 2015-07-08
    • 1970-01-01
    • 2013-06-03
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多