gpt4 book ai didi

c# - 重用具有不同 ViewModel 的 usercontrol(View)

转载 作者:行者123 更新时间:2023-11-30 16:51:25 25 4
gpt4 key购买 nike

我将直接进入我的问题。 :)

我使用 Caliburn.Micro 和 mvvm。16 个用户控件在我的 MainView 上。所有看起来都一样,但有些按钮、标签……就像那样:

<UserControl x:Class=" Projectxy.usercontrolexample01View"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Projectxy"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="305">
<Grid>
<Button x:Name="button" Content="Button" Width="75"/>
<Label x:Name="label" Content="Label"/>
<ComboBox x:Name="comboBox"/>
</Grid>
</UserControl>

我像这样调用 MainView 中的用户控件:

<ContentControl Name=" usercontrolexample01Model" Grid.Column="2" Grid.Row="1"/>
<ContentControl Name=" usercontrolexample02Model" Grid.Column="2" Grid.Row="2"/>

(我没有绘制 Bootstrapper,因为我认为这对我的问题没有必要......?)

我想要的是不要像这样在我的项目中添加 16 次相同的 xaml 代码:

usercontrolexample01View.xaml
usercontrolexample01ViewModel.cs

usercontrolexample02View.xaml
usercontrolexample02ViewModel.cs


如果我想改变一些东西,很难改变 16 个 xaml 文件......

我想在我的 MainView 中有 16 个 View 和 16 个 ViewModel(每次我在 MainView 中重复使用它)但是 16 个 View “后面”应该只有 1 个应该重复使用的 xaml 文件(usercontrolexampleView.xaml)。

usercontrolexampleView.xaml
usercontrolexample01ViewModel.cs
usercontrolexample02ViewModel.cs
usercontrolexample03ViewModel.cs

有什么方法可以在 Caliburn.Micro 中重用 1 个用户控件(xaml 文件)?我没有找到关于那个的文章... :((有一些标题相同,但它们有其他重点,例如 thread。)最后我找到了一个 question这更符合我的方向……但是我怎么能用 Caliburn 来管理它呢?也许有人为我提供了一段带有解释的代码?

我希望我的问题很清楚。我只是 stackoverflow、wpf 和 caliburn micro 的新手……而且不太熟悉英语……:(

感谢所有建议!

最佳答案

Caliburn.Micro根据命名约定为 View 模型选择 View 。如果你有一个 View 模型类(它应该在 <appfolder>/ViewModels/ 子文件夹中的一个文件中并命名为 <name>ViewModel.cs ),它将在 <appfodler>/Views/ 中查找名为“View.xaml”的用户控件。子文件夹,如果找到,则使用它来显示 View 模型。

在您的情况下,您可以在主视图模型中拥有尽可能多的特定 View 模型实例,然后将它们绑定(bind)到 ContentControl。 - 每个将使用相同的、一旦定义的 View ,因为它们属于同一类型。

例如:假设您的 View 模型称为 SubViewModel ,并且您已经为其创建了一个名为 SubView.xaml 的 View .在主视图模型中,定义任意数量的实例,

public SubViewModel sVM1 {get;set;}
public SubViewModel sVM2 {get;set;}

(甚至制作一个 List<SubviewModel>),然后在主视图中,将它们放在您喜欢的位置,

...
<ContentControl Name="sVM1"/>
....
<ContentControl Name="sVM2"/>

然后它们都将使用 SubView.xaml 显示. (另请注意,此处还有另一个绑定(bind)约定:通过将 ContentControl 命名为与 SubViewModel 实例相同的名称,它们会自动由 caliburn.micro 绑定(bind))。

关于c# - 重用具有不同 ViewModel 的 usercontrol(View),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33889126/

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