我看到朋友的代码出现绑定了 一个 TextBlock 的 Text 的 length ,那时候我觉得 length 不是依赖属性,绑定了是无法通知的。最后我做了实验才发现,原因有 Text 可以通知。
请看简单的代码,界面就是一个 TextBlock 和两个按钮,其中一个按钮是绑定了 length 如果大于 0 才可以使用。一个按钮是把 TextBlock 的文字设置为空或者设置为任意字符串。
看到IsEnabled="{Binding ElementName=TitleBlock,Path=Text.Length,Converter={StaticResource LengthToBoolenConverter}}"
绑定就是 Text.Length ,但是 Length 不是依赖属性,没有通知,那么在 Text 变化时是否会通知?会的,因为使用的是 Text 的 Length,所以在 Text 修改时就会改变了 Length 。
如果有一个 Model 类,这个类是没有继承通知的,那么如何在里面的属性修改时,可以通知?一个方法就是在 ViewModel 使用 Model 属性,每次都是修改整个 Model
这样可以不修改 Model 就可以在修改属性通知,但是可以看到这需要复制所有属性,不过我有写了C# 使用Emit深克隆使用这个就可以做快复制,而且还是深复制,但是复制不是真的深,代码复制是一层,如果需要实现真的复制,还需要自己去写
那么不复制是否可以做?可以,只需要调用OnPropertyChanged
请把上面的代码做修改,添加一个函数,这个函数更新会自动通知。
在按钮点击就把代码修改为
需要添加一些绑定,请看代码
设置了 DataContext 之后就可以在界面绑定,这时可以看到和直接设置TextBlock的文字看起来是一样
源代码:[免费]WpfTextLengthdc-CSDN下载
原文链接: http://blog.lindexi.com/post/wpf-%E7%BB%91%E5%AE%9A-TextLength-
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。