ag_e_parser_bad_property_value Silverlight绑定页面标题

时间:2010-04-18 16:19:19

标签: silverlight silverlight-3.0

XAML:

<navigation:Page ... Title="{Binding Name}">

C#

public TablePage()
{
    this.DataContext = new Table() 
    { 
        Name = "Finding Table"
    };
    InitializeComponent();
}

在InitializeComponent中发生标题绑定时发生ag_e_parser_bad_property_value错误。我尝试添加静态文本,工作正常。如果我在其他地方使用绑定,例如:

<TextBlock Text="{Binding Name}"/>

这也不起作用。

我猜它是抱怨的,因为没有设置DataContext对象,但如果我在InitializeComponent之前放入一个断点,我可以确认它已填充并且Name属性已设置。

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

您只能对DependencyProperty支持的属性使用数据绑定。如果您查看TextBlock的文档,您会发现Text属性具有匹配的TextProperty公共静态字段DependencyProperty

如果查看Page的文档,您会发现没有定义TitleProperty,因此Title属性不是依赖属性。

修改

没有办法“覆盖”这个,但你可以创建一个附加属性: -

public static class Helper
{
    #region public attached string Title
    public static string GetTitle(Page element)
    {
        if (element == null)
        {
            throw new ArgumentNullException("element");
        }
        return element.GetValue(TitleProperty) as string;
    }

    public static void SetTitle(Page element, string value)
    {
        if (element == null)
        {
            throw new ArgumentNullException("element");
        }
        element.SetValue(TitleProperty, value);
    }

    public static readonly DependencyProperty TitleProperty =
            DependencyProperty.RegisterAttached(
                    "Title",
                    typeof(string),
                    typeof(Helper),
                    new PropertyMetadata(null, OnTitlePropertyChanged));

    private static void OnTitlePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        Page source = d as Page;
        source.Title = e.NewValue as string;
    }
    #endregion public attached string Title

}

现在你的页面xaml看起来有点像: -

<navigation:Page ...
    xmlns:local="clr-namespace:SilverlightApplication1"
    local:Helper.Title="{Binding Name}">

答案 1 :(得分:0)

将以下内容添加到MyPage.xaml.cs:

public new string Title
{
  get { return (string)GetValue(TitleProperty); }
  set { SetValue(TitleProperty, value); }
}
public static readonly DependencyProperty TitleProperty =
    DependencyProperty.Register("Title",
      typeof(string),
      typeof(Page),
      new PropertyMetadata(""));

将此属性(依赖项属性)添加到后面的代码后,您的代码将正常工作。