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

标签 wpf mvvm caliburn.micro

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

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

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

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

最佳答案

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

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

按照约定,您的组合框如果称为 Payment会自动将所选值绑定(bind)到 SelectedPayment您的导体的属性(property)。在此属性的 setter 中,您可以调用 ActivateItem根据 SelectedPayment 的值来选择合适的支付 View 模型引用方法.

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

还应该在您的导体 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/

相关文章:

c# - Caliburn.Micro - 是否可以验证基于约定的绑定(bind)的异常?

wpf - Caliburn Micro 中屏幕之间的滑动过渡动画

wpf - Caliburn.Micro 我应该使用 Screen 还是 Conductor.AllActive 作为我的父 View

c# - 自定义项目类型 Visual Studio 中的自定义 XAML 设计器

c# - 是否可以将命令绑定(bind)到资源?

c# - Frame.Navigate 到不同程序集中的 Page 派生类

android - 在不同 fragment 上使用相同的 View 模型

model-view-controller - 模型 View ...适用于 Blazor

c# - 使用 MVVM 从 WPF 中的 TextBox 进行正确的 DataGrid 搜索

c# - 使用 WPF 调试异常