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 установлено.
Какие-либо идеи?
Вы можете использовать привязку данных только к свойствам, которые поддерживаются 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}">