【发布时间】:2019-05-16 11:18:37
【问题描述】:
我在 Winforms 项目中使用了一些不错的老式 DataBinding。
我的表单带有一个控件(对于那些想知道的人来说,一个 devExpress RichTextEdit)
我想将richTextEdit 控件的HtmlText 属性绑定到我的ViewModel 上的一个属性
我已经完成了绑定,这不是问题。但是我已经意识到来自richTextEdit 的HtmlText 是HtmlEncoded。这意味着字符被编码到它们的 html 实体表示中。
例如< 变为< 等
我不希望这种情况发生,因为这些标签在后面有特殊含义,我需要保留它们。
所以在我的 ViewModel 中,所有的 notify 属性都发生了变化,并且基本上包装了我的域对象,我可以这样做
public class ViewModel: INotifyPropertyChanged
{
public string WrappedProperty
{
get => domainObject.Property;
set
{
domainObject.Property = HttpUtility.DecodeHtml(value);
//Raise Property changed event etc
}
}
}
在我的表单中我创建了一个数据绑定
Binding binding = new Binding("HtmlText", _viewModel, "WrappedProperty", true, DataSourceUpdateMode.OnPropertyChanged,null,null);
_richEditControl.DataBindings.Add(binding);
现在这可以按预期工作,但是我不喜欢它。由于我当前使用的控件,我的视图模型正在做事。它“漏水”而且有气味。
我希望我的 View 能够处理特定于视图的问题。
我想做的是在控件 Html Text 属性和我的 View 模型 WrappedProperty 属性之间创建绑定,提供设置属性时要使用的自定义函数 从控件到视图模型。是可以实现的东西还是我缺少某种常见的解决模式?
谢谢
【问题讨论】:
标签: c# winforms data-binding