gpt4 book ai didi

wpf - 如何使用 MVVM 将 ViewModel 中的元数据应用于 WPF 中的 View

转载 作者:行者123 更新时间:2023-12-03 10:25:56 27 4
gpt4 key购买 nike

我有一个 View 模型,其属性如下所示,以及整个 View 模型中使用的一组特定属性。

public class MyViewModel : BaseModel
{
[StringLength(50), Required]
[SetLockedForExistingEntities]
public string FirstName { get ... set ... }

public bool IsInNewMode { get; }
}

现在我想以一致的方式在 View 中应用这样的元数据。像...如果绑定(bind),则从 MaxLengthAttribute 设置 TextBox 最大长度。如果设置了 SetLockedForExistingEntitiesAttribute,则禁用控件以防 viewModel 未处于某些"new"模式等。

使用自定义 MarkupExtension 替换 VM 绑定(bind)的“绑定(bind)”是否可行/是个好主意?还是使用 Behavior(通过附加属性应用)尝试将任何可以从绑定(bind)的 ViewModel 属性应用到它附加到的控件上会更好吗?

用法就像

(A) 从 TextBox.Text 读取绑定(bind)并应用行为的附加依赖属性

<TextBox Text="{Binding Model.FirstName, ValidatesOnDataErrors=True}" "bb:MyBindingHelper.ApplyViewModelBehaviors="True" />

(B) 多合一的自定义 MarkupExtension
<TextBox Text="{BindingWithModelBasedBehaviors Model.FirstName}" />

最佳答案

您可以编写一个标记扩展,从数据上下文中获取属性并读取属性。
这会有点复杂,但您可以获取引发源更改事件的属性的属性名称。

这在我看来更像是验证。
您可以在基本 View 模型中实现 inotifydataerrorinfo 并在那里编写代码以使用属性验证属性。
这就是代码的工作方式:
https://gallery.technet.microsoft.com/scriptcenter/WPF-Entity-Framework-MVVM-78cdc204

这通过 View 告诉 View 模型哪个属性的值刚刚传递给 View 模型来起作用。
您可以扩展用于提高属性更改的方法,以将属性名称传递给验证。
或者,您甚至可以在设置属性值之前从属性 setter 中调用的方法进行检查,如果新属性验证失败,则不设置值。

由于特定属性以特定方式验证失败,您可以运行操作。
我链接的那个应用程序的生产代码版本也有一个使用的谓词字典和属性。他们可以在其中包含引用并设置其他 View 模型属性的代码。

关于wpf - 如何使用 MVVM 将 ViewModel 中的元数据应用于 WPF 中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50026284/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com