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属性已设置。
有什么想法吗?
答案 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(""));
将此属性(依赖项属性)添加到后面的代码后,您的代码将正常工作。