簡體   English   中英

使用不同的ViewModel重用usercontrol(View)

[英]reuse an usercontrol(View) with different ViewModels

我會直接談談我的問題。 :)

我使用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

有沒有辦法重用1個Usercontrol(xaml文件)與Caliburn.Micro? 我沒有找到有關的一些物品... :((有一些與影片名稱相同,但他們有其他的重點是這樣的線程 )。Finaly我發現了一個問題,這更多的是我的方向....但怎么可能我用Caliburn管理它?也許某人有一個代碼剪斷了我的解釋?

我希望我的問題很明確。 我剛剛接觸stackoverflow,wpf和caliburn micro ...並且不熟悉英語...... :(

謝謝你的所有建議!

Caliburn.Micro根據命名約定為視圖模型選擇視圖。 如果你有一個視圖模型類(它應該在<appfolder>/ViewModels/子文件夾中的一個文件中,並命名為<name>ViewModel.cs ),它將在<appfodler>/Views/尋找一個名為'View.xaml'的用戶控件的視圖<appfodler>/Views/子文件夾,如果找到它,用它來顯示視圖模型。

在您的情況下,您可以在主視圖模型中包含特定視圖模型的任意數量的實例,然后將它們綁定到ContentControl - 每個將使用相同的,一旦定義的視圖,因為它們是相同類型。

例如:假設您的視圖模型名為SubViewModel ,並且您已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自動綁定)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM