我建议不要这样做。
这个想法会有一些缺点:
您将被限制为单向绑定,或者在绑定更新时强制保存。
当控件加载时,您的文件操作将被激活,您将无法对文件交互进行外部控制。
您在转换器中处理读写异常时遇到了困难,只有其他可以捕获它的地方是您的通用未处理异常处理程序。不好玩。
如果您有多个控件副本,则您有多个负责控制读写的对象,并且您将被迫关闭该文件。
我会考虑让代码隐藏公开富文本字段,或公开更新富文本字段的属性。这样你就可以控制它了。而且您可以在需要时控制文件操作,而不是在转换器干预时。
如果你必须...
首先,您的绑定错误。您不要从控件外部绑定,因为您仍然有两个副本。一个副本将是您的控件的内容,另一个副本将是富文本控件的副本。您在控件上的属性和富文本控件上的内容属性之间进行绑定。在那里你使用转换器。
您需要对其进行更改,以便您的自定义控件的内容实际上是一个作为文件路径的字符串,并且转换器位于您的内部富文本和包装控件之间。
public class myCustomRichEditWithIconBars
{
public override void OnApplyTemplate()
{
// get part and store in _textField;
// bind rich text content field to filepath using converter.
// this can be done in the xaml of your control too.
}
public String filePath {...}
private RichText _textField {...}
}
转换器将打开文件路径并读取文件并返回文件的内容,当它转换回来时,它将从富文本的内容中保存文件。
public class myConverter : IValueConverter
{
Convert(...)
{
var filePath = (String)value;
// read file, return what goes into the rich text field.
}
ConvertBack(...)
{
var richText = // the data from the field.
// save into file.
}
}