gpt4 book ai didi

wpf - 使用 Caliburn.Micro 的组合框驱动 UI 元素

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

我试图在一个小型测试 WPF 应用程序中了解 Caliburn.Micro 和 MVVM。

我有一个自定义用户控件,它有一个支付组合框(带有现金、支票、信用),在这个组合框旁边,我想根据所选的支付类型加载适当的数据输入 View 。
例如,如果用户选择现金,也许我只加载带有金额文本字段的 View ,但如果用户选择信用卡,我将加载带有金额、信用卡类型、信用卡号等字段的 View 。

Caliburn.Micro 能以任何方式帮助解决这个问题吗?我一直想知道这是否是 Caliburn.Micro 中内置的屏幕和导体功能的用例,但我不确定。如果 Caliburn 可以提供帮助,那么 View 模型层次结构应该支持什么?我可以看到有一个 PaymentViewModel 包含一个 PaymentTypeViewModel 的实例,但我不确定如何促进 PaymentTypeViewModel 实例的切换,该实例将以某种方式基于组合框中的当前选择以及加载关联的 View 对于该 View 模型。

非常感谢您提供的任何建议。

最佳答案

有几种方法可以做到这一点,但使用 Caliburn 的 ConductorScreen类型最有意义。我想一个问题是,一旦您从用户那里检索到这些数据,您将如何处理它?当您在不同屏幕上从用户那里检索更多信息时,它会被持久化还是临时存储为应用程序状态?

无论哪种方式,使用单个屏幕导体 (Conductor<T>) 都是有意义的,它将保存对三种类型的支付检索屏幕中的每一种的引用。为每个支付屏幕创建一个 View 模型和 View ,在您的 Conductor 中实例化并存储对每个屏幕的引用(或者最好还是将这些作为依赖项注入(inject)到您的导体的构造函数中,或者注入(inject)一个实例化它们的工厂类型)。

通过约定,如果您的组合框被称为 Payment将自动将所选值绑定(bind)到 SelectedPayment您的导体的属性(property)。在此属性的 setter 中,您可以调用 ActivateItem基于 SelectedPayment 值的适当支付 View 模型引用上的方法.

据推测,您的指挥器上会有一个“确定”或类似的按钮,它可以从当前事件的模型 (ActiveItem) 中检索数据。每个支付 View 模型都可以实现一个接口(interface),例如带有 GetPaymentDetails 的接口(interface)。方法,也许这可以返回准备持久化的详细信息的序列化形式。

还应该在您的指挥 View 中提及(假设它称为 ShellView.xaml),您可以使用 ContentControl显示当前的支付 View 模型(并让 Caliburn 注入(inject)适当的 View 并进行绑定(bind)),它被引用为 ActiveItem :

<ContentControl x:Name="ActiveItem" />

请注意,您可能有点花哨,并为您的组合框命名(有点模糊) Items。 ,并绑定(bind)其 ItemsSource到您的付款 View 模型的集合,可以是 Items收藏 Conductor<T>.Collection.OneActive . Caliburn 将自动将选定的值(支付 View 模型)绑定(bind)到 ActiveItem属性,因此您当前的 View 将在您更改组合框值时自动切换。

关于wpf - 使用 Caliburn.Micro 的组合框驱动 UI 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476557/

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