gpt4 book ai didi

design-patterns - 如何在我的 View 模型中动态构建 UI

转载 作者:行者123 更新时间:2023-12-02 02:28:05 25 4
gpt4 key购买 nike

我已经为我们的 silverlight 应用完全采用了 MVVM 模式。然而,我们的一些 UI 是数据驱动的。主要是两项...

  1. 菜单。我们正在使用 Infragistics XamMenu。

  2. 我们有一个“仪表板”,允许用户添加“管理单元”。这有点像门户网站,例如 iGoogle。

在上述两种情况下,UI 都需要在运行时构建。目前我正在后台代码中运行代码,因为我没有看到访问 ViewModel 中的 UI 树的简单方法。

为了在 View 中运行代码,我在 ViewModel 中创建了一个事件,该事件在加载数据后触发。因此,我必须在后面的 View 代码中引用对 View 模型的引用。我不喜欢它,它非常丑陋...所以基本上有两个问题:

  1. 如何让 View 从 View 模型中获取数据已加载的消息,而无需在后面的 View 代码中直接引用 View 模型?目前我从数据上下文中提取引用。

  2. 是否可以在 View 模型中构建 UI 并使用数据绑定(bind)。我想知道是否可以将 contentcontrol 的“内容”绑定(bind)到 View 模型中的某种类型(不确定该类型是什么)?当然,不好的部分是 View 模型的可测试性似乎消失了。绑定(bind)可以这样用吗?

最佳答案

要回答问题 1,为什么不使用 MVVM light“Messenger”类。

在您看来,您通过以下方式注册收听消息:

Messenger.Default.Register<bool>(this, "MessageId", DoSomething);

其中 DoSomething 是一个接受 bool 参数的方法(例如)。

然后,要从您的 View 模型发送消息,请执行以下操作:

 Messenger.Default.Send(false, "MessageId");

希望对您有所帮助 :) 您需要将此添加到您的使用中:

using GalaSoft.MvvmLight.Messaging;

关于design-patterns - 如何在我的 View 模型中动态构建 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4948875/

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