gpt4 book ai didi

wpf - 绑定(bind)到 UserControl 的集合

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

我有一个用 WPF(MVVM)编写的应用程序,它会根据某些条件创建不同 UserControls 的实例,这些 UserControls 是完全独立的,用于显示某些信息。他们里面有一些自定义逻辑,比如计时器等等,所以我不能使用模板。

现在我面临一个问题,我想在 ViewModel 中创建一个 UserControls 列表,并将主机 UI 绑定(bind)到它。问题是我不知道如何绑定(bind)和绑定(bind)什么。在非 MVVM 项目中,您只需获取要放置控件的布局,并将它们作为子项添加到那里。在 MVVM 应用程序中,我不知道该怎么做。我想象有一个带有 ItemsSource 的 WrapPanel,它将根据用户控件添加所有控件并根据需要调整自身大小。

有人可以提出解决方案吗?

编辑:
我的 ViewModel 公开了 可观察集合 IMyDriver 现在。所以这就是我的想法,打破一点 MVVM 以获得我接下来描述的内容:
现在,每个 IMyDriver 都可以是不同类型的驱动程序,并且可以实现不同的其他接口(interface)。我需要 UI 来创建特定的用户控件,这些用户控件知道如何根据这些驱动程序的功能获得最大的 yield 。简而言之,用户控件通过驱动程序连接到设备,用于轮询数据。每个 UserControl 都以特定的方式进行。

最佳答案

通过为每个 UserControl 中的数据声明特定的数据类型类,您可以非常简单轻松地做到这一点。并定义 DataTemplate暴露你的 UserControl s 在 App.xaml文件:

<DataTemplate DataType="{x:Type YourViewModelsPrefix:YourViewModel">
<YourViewsPrefix:YourView />
</DataTemplate>
<DataTemplate DataType="{x:Type YourViewModelsPrefix:YourOtherViewModel">
<YourViewsPrefix:YourOtherView />
</DataTemplate>
<DataTemplate DataType="{x:Type YourViewModelsPrefix:AnotherViewModel">
<YourViewsPrefix:AnotherView />
</DataTemplate>

现在,每当框架遇到这些 View 模型类的实例时,它都会渲染相关的 View / UserControl .您可以使用 ContentControl 获得 View 模型类型的属性来显示它们。像这样:
<ContentControl Content="{Binding YourViewModelProperty}" />

...
public YourBaseViewModelClass YourViewModelProperty { get; set; }

确保您的所有 View 模型都扩展了此类:
public YourViewModel : YourBaseViewModelClass { }
...
public AnotherViewModel : YourBaseViewModelClass { }

然后您可以像这样交换每个 View 模型(并显示每个相关 View ):
YourViewModelProperty  = new AnotherViewModel();

关于wpf - 绑定(bind)到 UserControl 的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25870996/

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