【发布时间】:2018-04-25 15:39:05
【问题描述】:
我有一个具有如下属性的 viewModel 和一组在整个 viewmodel 中使用的特定属性。
public class MyViewModel : BaseModel
{
[StringLength(50), Required]
[SetLockedForExistingEntities]
public string FirstName { get ... set ... }
public bool IsInNewMode { get; }
}
现在我想以一致的方式在视图中应用此类元数据。像...如果绑定,则从 MaxLengthAttribute 设置 TextBox 最大长度。如果设置了 SetLockedForExistingEntitiesAttribute,则禁用控件以防 viewModel 未处于某些“新”模式等。
使用自定义 MarkupExtension 替换 VM 绑定的“绑定”是否可行/是个好主意?还是使用 Behavior(通过附加属性应用)会更好地尝试将任何可以从绑定的 ViewModel 属性应用到它所附加的控件?
用法会像
(A) 从 TextBox.Text 读取绑定并应用行为的附加依赖属性
<TextBox Text="{Binding Model.FirstName, ValidatesOnDataErrors=True}" "bb:MyBindingHelper.ApplyViewModelBehaviors="True" />
(B) 多合一的自定义标记扩展
<TextBox Text="{BindingWithModelBasedBehaviors Model.FirstName}" />
【问题讨论】:
标签: wpf mvvm data-binding