2015-11-24 67 views
3

我會直接回到我的問題。 :)重複使用不同視圖模型的用戶控件(視圖)

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

(我不積引導程序,因爲我認爲這是?沒有必要爲我的問題...)

我想是不是在我的項目一樣,加16倍相同的XAML代碼:

usercontrolexample01View.xaml 
usercontrolexample01ViewModel.cs 

usercontrolexample02View.xaml 
usercontrolexample02ViewModel.cs 

… 

如果我想改變某些東西,很難更改16個xaml文件...

我想在我的MainView和16個ViewModels中使用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微...並不是那熟悉英語... :(

感謝所有的建議!

+0

爲什麼一個UserControl(View)有多個虛擬機? – niksofteng

+1

好的,那裏應該有一個虛擬機,用於View的一次重用:)。最後,View的每個重用代表一個客戶端...這就是爲什麼我想使用許多VM。希望清楚嗎? :) –

+0

你有相同的視圖和不同的ViewModel,並且視圖的行爲基於實例化的ViewModel類而改變? –

回答

2

Caliburn.Micro基於命名約定視圖模型選秀權的看法。如果你有一個視圖模型CLA ss(它應該位於<appfolder>/ViewModels/子文件夾中的一個文件中,並且名稱爲<name>ViewModel.cs),它將在<appfodler>/Views/子文件夾中查找名爲'View.xaml'用戶控件的視圖,如果它找到它,請將其用於顯示視圖模型。

對於您的情況,您可以在主視圖模型中擁有特定視圖模型的多個實例,然後將它們綁定到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)。

+0

好吧,如果我明白你的答案,我已經在和1 xaml(視圖)和一個viewmodel。但ViewModel的許多實例。如果我使用很多線程來「使用」這個viemodel,那麼最終會出現問題嗎? –

+0

您不必使用'多線程',只需幾個實例。這完全沒有問題。 – EluciusFTW

相關問題