ag_e_parser_bad_property_value Silverlight, Связывающая название страницы

XAML:

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

C#

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

Получение ag_e_parser_bad_property_value ошибки в InitializeComponent в точке, где привязка заголовка происходит. Я попытался добавить статический текст, который хорошо работает. Если я использую привязку где-нибудь еще, например:

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

Это не работает также.

Я предполагаю, что это жалуется, потому что объект DataContext не установлен, но если я вставил точку останова перед InitializeComponent, я могу подтвердить, что это заполняется, и свойство Name установлено.

Какие-либо идеи?

6
задан AnthonyWJones 18 April 2010 в 20:10
поделиться

1 ответ

Вы можете использовать привязку данных только к свойствам, которые поддерживаются DependencyProperty . Если вы посмотрите документацию для TextBlock , например, вы обнаружите, что свойство Text имеет соответствующее общедоступное статическое поле TextProperty типа DependencyProperty .

Если вы посмотрите документацию для Страница , то обнаружите, что 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}">
8
ответ дан 16 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: