gpt4 book ai didi

wpf - 使用 MVVM 模式实现 UI 状态机

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

我正在使用 wpf 作为 UI 层的状态机程序,我使用了这个链接:
http://elijahm.ninjuro.com/2012/01/04/visual-states-in-wpf-4-0/#comment-312文章通过调用 VisualStateManager.GoToState(,,) 来更改事件窗口的内容。

但我不是一个好的 wpf 开发人员,我的问题是那篇文章的最后一部分,即“从一种状态更改为另一种状态”部分,其中开发人员创建 StateManager 类并使用它来更改 UI 状态。
我不知道在我的代码中哪里可以使用 StateManager 以及如何将业务状态更改传输到 UI?

最佳答案

好问题。看起来该博客文章的作者确实假设您会知道将他展示的代码片段放在哪里,部分基于类的名称和绑定(bind)的使用等。另外,如果您还没有,这将有助于阅读 MVVM 模式,以便他引用的内容更有意义。

话虽如此,我将简要解释博客文章的该部分。首先,“StateManager”类类似于this answer中的“StateHelper”类。 .该答案也有更多解释。

本质上,我们需要协同工作的三个主要部分:ViewModel、View 和自定义附加属性类(尤其是此附加属性的更改回调方法)。

作者在他的 中创建了一个属性。查看型号 (类型为 string )称为“ViewState”。这里的想法是,至少在他的方法论中,ViewModel 将知道何时应该更改 View 状态(即,响应数据的特定更改)。因此,当那个时候到来时,他将使用常规 C# 代码将 ViewModel 的“ViewState”属性更改为另一个状态名称(可能是“alertState”或其他名称) - 可能类似于:

this.ViewState = "alertState";  

然后将其联系在一起的事实是 查看 有一种方式只是 binding (即“监听更改”)到那些“状态更改” - 这意味着 View 通过监听 ViewModel 的“ViewState”属性的更改来执行状态更改(不是那么简单,但我会到达那里在一分钟内)。
StateManager.VisualStateProperty = "{Binding Path=ViewState}"

它能够执行实际 VisualStateManager 状态更改的方式是自定义 “StateManager.VisualStateProperty”附加属性的更改回调方法执行内置的 WPF 方法 VisualStateManager.GoToState(...) .在他的帖子中,这是我所指的更改后的回调:
new PropertyMetadata((dependencyObject, args) =>
{
var frameworkElement = dependencyObject as FrameworkElement;
if (frameworkElement == null)
return;
VisualStateManager.GoToState(frameworkElement, (string)args.NewValue, true);
}));

因此,当 ViewModel 更改其 ViewState 属性时,并且由于 View 具有与该属性的绑定(bind),并且由于此自定义附加属性已分配了该绑定(bind)的结果,绑定(bind)引擎会更改其绑定(bind)的“结果”,这会导致“StateManager.VisualStateProperty”的值发生变化,这会导致上述更改后的回调方法触发,这(最终)会导致 VisualStateManager.GoToState(..)方法来执行实际的视觉状态更改。

关于wpf - 使用 MVVM 模式实现 UI 状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14730134/

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