我会直接回答我的问题。 :)
我使用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中调用usercontrol,如:
<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个ViewModel中有16个视图(每次我在MainView中重复使用它),但16个视图的“后面”应该只是1个xaml文件,应该重用(usercontrolexampleView.xaml)。
usercontrolexampleView.xaml
usercontrolexample01ViewModel.cs
usercontrolexample02ViewModel.cs
usercontrolexample03ViewModel.cs
有没有办法在Caliburn.Micro中重用1个Usercontrol(xaml-file)?我没有找到一些关于那个......的文章:((有一些具有相同的标题,但他们有其他焦点,如thread。) 最后我找到了question,这更符合我的指示......但我怎么能用Caliburn来管理呢?也许某人有一段代码剪断了我的解释?
我希望我的问题很明确。我刚接触stackoverflow,wpf和caliburn micro ...并且不熟悉英语...... :(
感谢所有建议!
答案 0 :(得分:2)
Caliburn.Micro
根据命名约定选择视图模型的视图。如果您有一个视图模型类(它应该在<appfolder>/ViewModels/
子文件夹中的一个文件中并命名为<name>ViewModel.cs
),它将查找一个名为&#39; View.xaml&#39; <appfodler>/Views/
子文件夹中的用户控件,如果找到它,则使用它来显示视图模型。
在您的情况下,您可以在主视图模型中包含特定视图模型的任意数量的实例,然后将它们绑定到ContentControl
- 每个将使用相同的,一旦定义的视图,因为它们是相同的类型。
例如:假设您的视图模型名为SubViewModel
,并且您已为其创建了一个名为SubView.xaml
的视图。在主视图模型中,定义任意数量的实例,
public SubViewModel sVM1 {get;set;}
public SubViewModel sVM2 {get;set;}
(甚至制作List<SubviewModel>
个,并在主视图中,将它们放在您喜欢的位置,
...
<ContentControl Name="sVM1"/>
....
<ContentControl Name="sVM2"/>
然后他们将全部使用SubView.xaml
显示。 (另请注意,此处还有另一种绑定约定:通过将ContentControl
命名为与SubViewModel
实例相同,它们将自动绑定到caliburn.micro
)。