Windows phone 8 绑定自定义依赖项属性获取数据绑定到字符串无法转换异常

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

我需要通过Windows Phone 8中的绑定表达式设置RichTextBox用户控件的Xaml属性,我发现它不是DP,所以我决定从RichTextBox继承并添加一个DP,该DP将使用PropertyChanged事件更改Xaml属性,不管怎样,代码看起来是这样的,去掉了不相关的部分

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
。A
decimal
使用
decimal.Zero
。作为字符串,
string.empty
可以作为基础

这允许任何可能盲目反映属性的操作,它可以确定其真正的属性类型并相应地访问它


因此,将
0
赋值给
字符串
对于标识属性是
字符串(0将其标识为整数)毫无意义。因此,
int
as
string
正在设置一个未来的运行时,当对象试图为其分配绑定、样式和其他项时,它会失败

有关详细解释,请查看下面的OmegaMan答案。
new PropertyMetadata(default(string), new PropertyChangedCallback(OnBindableXamlChanged))