从资源字典获取数据模板时的空/空绑定

本文关键字:绑定 资源 字典 获取 数据 | 更新日期: 2023-09-27 18:31:07

>我正在尝试从代码中的资源字典中获取DatatTemplate。问题是当我尝试将其保存为字符串时,我得到的所有绑定位置为空或空。

这是我的代码段

    ResourceDictionary dictionary = new ResourceDictionary();
        dictionary.Source = new Uri("WpfApplication1;component/Dict.xaml", UriKind.RelativeOrAbsolute);
        DataTemplate template = (DataTemplate) dictionary["helloTextBox"];
        string save = XamlWriter.Save(template.LoadContent());

我会很高兴得到任何见解。

谢谢

从资源字典获取数据模板时的空/空绑定

事实证明,

我需要在 TypeConverter 中为 BindingExpression 注册一个绑定转换器,以便序列化处理绑定,因为默认情况下它们不是序列化的。

需要将此类添加为表达式转换器

public class BindingConverter : ExpressionConverter
{
    public override bool CanConvertTo(System.ComponentModel.ITypeDescriptorContext context, Type destinationType)
    {
        return true;
    }
    public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
    {
    if (destinationType == typeof(MarkupExtension))
    {
        BindingExpression bindingExpression = value as BindingExpression;
        if (bindingExpression == null)
        {
            throw new FormatException("Expected binding, but didn't get one");
        }
        return bindingExpression.ParentBinding;
    }
    return base.ConvertTo(context, culture, value, destinationType);
}

}

然后使用此方法注册我执行 XamlWriter.Save 部分的位置

private void Register()
{
    Attribute[] attr = new Attribute[1];
    TypeConverterAttribute vConv = new TypeConverterAttribute(typeof(BindingConverter));
    attr[0] = vConv;
    TypeDescriptor.AddAttributes(typeof(BindingExpression), attr);
}

取自这里:在代码隐藏中设置模板绑定