gpt4 book ai didi

wpf - 在为 UserControls 创建 VM 时,应该由谁来创建和设置 VM?

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

我对如何在 MVVM 中布局我的代码感到有些困惑——如果我有一个带有相应 VM 类的 UserControl,其他控件应该如何使用我的 UserControl?

消费者应该直接绑定(bind)到 VM,还是应该只复制这些属性的子集,我想实际用作 UserControl 的 DependencyProperties?

就此而言,应该将 UserControl 的 VM 注入(inject)到 UserControl 的代码隐藏中,还是应该将使用此 UserControl 的任何控件的 VM 包含它作为依赖项并将其绑定(bind)到 UserControl?

为了清楚起见:假设我在 UserControl 中有一个 ListBox,并在已经用 MVVM 实现的 Window 中使用它。但我对 UserControl VM 和相应绑定(bind)的实现感到困惑。

我认为理想的解决方案是通过 UserControl 中的依赖属性公开 ListBox 的 SelectedItems,然后使用 UserControl 的 Window 将绑定(bind)到这些。

或者 Window 的 VM 是否应该将 VM 作为属性进行引用,是否将其注入(inject)并直接绑定(bind)到其上的属性?

依赖属性应该只在 UserControls 中定义还是可以/应该在 VM 中定义?

我认为窗口会从窗口的 XAML 中绑定(bind),或者通过

{Binding ElementName=myUserControl, Path=SelectedItems}

或者
{Binding Path=MyViewModel.SelectedItems} 

通过前者似乎更有意义,因为后者要求 View 知道另一个 VM?

最佳答案

> 其他控件应该如何使用我的 UserControl?

仅通过用户控件上的暴露依赖属性。

> 消费者应该直接绑定(bind)到 VM,还是应该只复制这些属性的子集,我想实际用作 UserControl 的 DependencyProperties?

每个控件都应该是一个独立的实体,不应该有任何 secret 握手(来往或来自)来使用该控件。把你的设计想象成微软,许多不同的用户会使用你的控件。所以答案#1同样相关;认为一个独立的实体。

>我认为理想的解决方案是通过 UserControl 中的依赖属性公开 ListBox 的 SelectedItems,然后使用 UserControl 的 Window 将绑定(bind)到这些。

托管您的控件的窗口将有一个 View 模型,其中包含一个可观察的数据项列表。这将保存用户控件将通过其依赖属性绑定(bind)的数据。将其视为具有许多消费者的生产者模式。消费者是控制者。控件是否有虚拟机与主程序的运行无关;因为每个控件都是它自己的岛。

关于wpf - 在为 UserControls 创建 VM 时,应该由谁来创建和设置 VM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13291269/

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