Windows phone 8 绑定自定义依赖项属性获取数据绑定到字符串无法转换异常
我需要通过Windows Phone 8中的绑定表达式设置RichTextBox用户控件的Xaml属性,我发现它不是DP,所以我决定从RichTextBox继承并添加一个DP,该DP将使用PropertyChanged事件更改Xaml属性,不管怎样,代码看起来是这样的,去掉了不相关的部分Windows phone 8 绑定自定义依赖项属性获取数据绑定到字符串无法转换异常,windows-phone-8,dependency-properties,data-binding,Windows Phone 8,Dependency Properties,Data Binding,我需要通过Windows Phone 8中的绑定表达式设置RichTextBox用户控件的Xaml属性,我发现它不是DP,所以我决定从RichTextBox继承并添加一个DP,该DP将使用PropertyChanged事件更改Xaml属性,不管怎样,代码看起来是这样的,去掉了不相关的部分 public class RichTextBoxWithBindableXaml : RichTextBox { public string BindableXaml { get
public class RichTextBoxWithBindableXaml : RichTextBox
{
public string BindableXaml
{
get { return (string)GetValue(BindableXamlProperty); }
set { SetValue(BindableXamlProperty, value); }
}
public static readonly DependencyProperty BindableXamlProperty =
DependencyProperty.Register("BindableXaml",
typeof(string),
typeof(RichTextBoxWithBindableXaml),
new PropertyMetadata(0));
}
//xaml code
<local:RichTextBoxWithBindableXaml BindableXaml="{Binding PageContent , Mode=OneWay}"> </local:RichTextBoxWithBindableXaml>
我发现我应该提供一个空的PropertyMetadata(新的PropertyMetadata(null)而不是0),或者如果应该在Xaml中使用DP,则应该提供一个具有默认值类型的元数据。对于我的sceneario,由于我将使用PropertyChangedCallback,因此将传递给Register方法的propertymetadata如下所示
new PropertyMetadata(default(string), new PropertyChangedCallback(OnBindableXamlChanged))
希望对其他人有所帮助。对于每个依赖项属性,必须提供一个非订阅值(此处不是C#术语),该值适合使用者将访问的对象类型 引用MSDN 依赖项属性元数据作为一个对象存在,可以查询该对象以检查依赖项属性的特征 因此,对于
值
类型结果,不同值类型(例如double
)的默认值是使用double.NaN
。Adecimal
使用decimal.Zero
。作为字符串,string.empty
可以作为基础
这允许任何可能盲目反映属性的操作,它可以确定其真正的属性类型并相应地访问它
因此,将
0
赋值给字符串
对于标识属性是字符串(0将其标识为整数)毫无意义。因此,int
asstring
正在设置一个未来的运行时,当对象试图为其分配绑定、样式和其他项时,它会失败 有关详细解释,请查看下面的OmegaMan答案。
new PropertyMetadata(default(string), new PropertyChangedCallback(OnBindableXamlChanged))