2015-11-24 2 views
3

Я перейду непосредственно к моей проблеме. :)повторное использование usercontrol (View) с различными ViewModels

Я использую Caliburn.Micro и mvvm. 16 Usercontrols находятся на моем 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> 

Я называю 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-файлов, если я хочу что-то изменить ...

Я хочу 16 просмотров в моем MainView и 16 ViewModels (каждый раз, когда я его повторно использую в MainView), но «позади» 16 Представления должны быть всего 1 xaml-файл, который следует использовать повторно (usercontrolexampleView.xaml).

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

Есть ли способ повторного использования 1 UserControl (XAML-файл) с Caliburn.Micro? Я не нашел статей об этом ... :((Есть некоторые с тем же тиллом, но у них есть другие фокусы, подобные этому thread.) Finaly Я нашел question, который больше в моем направлении .... Но как могу ли я управлять этим с помощью Caliburn? Может быть, у кого-то есть код, отрезанный с объяснениями для меня?

Я надеюсь, что мой вопрос ясен. Я просто новый для stackoverflow, wpf и caliburn micro ... И не тот, кто знаком с английским языком ... :(

Спасибо за все предложения!

+0

Почему существует несколько виртуальных машин для одного UserControl (View)? – niksofteng

+1

Хорошо, это может быть одна виртуальная машина для повторного использования View :). В конечном итоге каждое повторное использование представления представляет собой один клиент ... вот почему я хочу использовать много виртуальных машин. Надеюсь, это ясно? :) –

+0

У вас одинаковый вид и различные ViewModel и поведение изменения вида на основе экземпляра класса ViewModel? –

ответ

2

Caliburn.Micro кирки просмотров для просмотра моделей, основанных на именовании. Если у вас есть вид модели CLA ss (он должен быть в файле в подпапке <appfolder>/ViewModels/ и назван <name>ViewModel.cs), он будет искать представление под названием «View.xaml» для пользовательского элемента управления в подпапке <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).

+0

в порядке, если я понимаю ваш ответ, который у меня есть в 1 и xaml (view) и один viewmodel. Но многие экземпляры ViewModel. Есть ли в конце проблема, если я использую много потоков для «использования» этой viemodel? –

+0

Вам не нужно использовать 'many threads ', всего несколько экземпляров. Это не проблема. – EluciusFTW

Смежные вопросы