Winforms windows窗体数据绑定中的自定义逻辑

Winforms windows窗体数据绑定中的自定义逻辑,winforms,mvvm,Winforms,Mvvm,刚刚从使用Knockout.js进行web开发转到windows窗体,我正在阅读绑定方面的内容,我的目标是实现一个类似于Knockout的MVVM体系结构,但在windows窗体中 也就是说,我在尝试对控件的绑定应用自定义逻辑时遇到了问题,例如,我希望将错误标签的Visible属性绑定到ViewModel类中名为IsValid的函数的结果 如何实现这一点?Winforms(vb.net代码)中的下一个数据绑定示例有什么问题: 公共类信息 实现INotifyPropertyChanged 私有字作

刚刚从使用Knockout.js进行web开发转到windows窗体,我正在阅读绑定方面的内容,我的目标是实现一个类似于Knockout的MVVM体系结构,但在windows窗体中

也就是说,我在尝试对控件的绑定应用自定义逻辑时遇到了问题,例如,我希望将错误标签的Visible属性绑定到ViewModel类中名为IsValid的函数的结果


如何实现这一点?

Winforms(vb.net代码)中的下一个数据绑定示例有什么问题:

公共类信息
实现INotifyPropertyChanged
私有字作为字符串
公共属性字作为字符串
得到
返回字
结束
设置(值为字符串)
如果value.Equals(_Word)=False,则
_字=值
Me.NotifyPropertyChanged(“Word”)
如果结束
端集
端属性
公共事件PropertyChanged(发送方作为对象,e作为System.ComponentModel.PropertyChangedEventArgs)实现System.ComponentModel.INotifyPropertyChanged.PropertyChanged
私有子NotifyPropertyChanged(propertyName作为字符串)
RaiseEvent PropertyChanged(Me,新PropertyChangedEventArgs(propertyName))
端接头
Public Sub New(新词作为字符串)
Me.Word=newWord
端接头
公共函数IsValid()为布尔值
Return(String.IsNullOrEmpty(Me.Word)=False)
端函数
末级
以及表格的编号

公共类frmInfo
私人信息作为信息
Public Sub New(inInfo作为字符串)
初始化组件()
_信息=新信息(inInfo)
端接头
私有子frmInfo_Load(发送方作为对象,e作为事件参数)处理Me.Load
Me.txtID.DataBindings.Add(“Text”,“info”,“Word”)”为Word属性添加数据绑定
'将标签可见属性绑定到IsValid函数的结果
将绑定变暗为新绑定(“可见”、“信息”、“单词”)
AddHandler bind.Format,Sub(obj作为对象,args作为ConvertEventArgs)args.Value=\u raha.IsValid()
Me.lblEven.DataBindings.Add(bind)
端接头
末级

winforms不支持MVVM(也不支持任何有用的东西)。你正在寻找WPF。我已经有了遗留代码,所以除非有一种廉价的转换方式,否则我不会移动。然而,仅仅是一种体面的定制绑定方式将是一个巨大的进步。好吧,发布你的答案,解释windows窗体中缺少什么,以及为什么缺少的功能无法实现,我接受它的答案。。。您还可以方便地忽略在winforms中无法实现的MVVM部分,例如数据模板。不过,回避这一点并不会减少winforms的无用性。这段代码的一个问题是,如果我有另一个属性也可能会影响“IsValid”函数的结果,那么它实际上是绑定到属性“Word”的。不过,我发现了一个有趣的方法,就是将“IsValid”改为“IsValid”将其绑定到只读属性中,然后从所有其他setterRight中生成Me.NotifyPropertyChanged(“IsValid”),或者您可以在
IsValid
属性的内部生成
Me.NotifyPropertyChanged(“IsValid”)
,但在“IsValid”组中包含的每个属性Setter中为此设置值:
Me.IsValid=Me.IsValuesValid()
@Fabio出于某种原因,我以前没有看到你的评论。。。英雄联盟你一定是在开玩笑。。。我指的是,这些东西显然不受支持,需要大量可怕的黑客攻击,比如winforms这样的过时无用的平台。。。