2013-12-12 2 views
0

Я хотел бы переключить только часть моего представления (которое является UserControl) xaml. Например, я хотел бы иметь возможность изменять только вторую сетку.Переключение части xaml в View (Caliburn.Micro)

<Grid> //main grid 
    <Grid Name="1" Grid.Row="1"/> 
    <Grid Name="2" Grid.Row="2"/> 
</Grid 

Я пытался что-н, как это:

<UserControl.Resources> 
    <ControlTemplate x:Key="UsualMode"> 
     <Grid> 
     ... 
     </Grid> 
    </ControlTemplate> 
</UserControl.Resources> 
<Grid> //main grid 
    <Grid Name="1" Grid.Row="1"/> 
    <ControlTemplate Name="2" Grid.Row="2" Template="{StaticResource UsualMode}"/> 
</Grid> 

Затем с помощью триггеров и привязки я смог бы переключать шаблоны. К сожалению, это не работает для меня из-за исключения «Bootstrapper.cs not found». Как мне это сделать? Я не могу использовать проводник -> должен загружать только один вид.

+0

Вы хотите, чтобы иметь возможность переключать вид на тот же ViewModel? Если это так, Caliburn Micro поддерживает это из коробки, посмотрите на прикрепленное свойство View.Context и документы CM. – Charleh

+0

«Я не могу использовать проводник -> должен загружать только один вид». Только один просмотр, но содержимое этого вида можно переключить. –

ответ

1

http://caliburnmicro.codeplex.com/wikipage?title=All%20About%20Conventions

Читайте по основам разрешения зрения

В принципе вы можете создать следующие на ваш взгляд:

<UserControl.Resources> 
    <ControlTemplate x:Key="UsualMode"> 
     <Grid> 
     ... 
     </Grid> 
    </ControlTemplate> 
</UserControl.Resources> 
<Grid> //main grid 
    <Grid Name="1" Grid.Row="1"/> 
    <ContentControl x:Name="ChildViewModel" cal:View.Context="{Binding ContextBinding}" /> 
</Grid> 

Ваш родитель ViewModel должен иметь свойство «контекста» и имущество для размещения ребенка ВМ:

public class ParentViewModel 
{ 
    public SomeViewModel ChildViewModel { get; private set; } 

    public string ContextBinding { get; private set; } // make sure you implement INPC on these properties as is the usual 
} 

Ваше представление будет разрешено на основе строки ContextBinding (в соответствии с вышеприведенными соглашениями CM).

Так что, если вы должны были обновить строку:

ContextBinding = "DetailedView"; 

CM затем обновить пользовательский интерфейс и попытаться взглянуть на вид называется DetailedView в подпространстве имен текущего виртуальных машин имен

Если вы дон Не хотите иметь дочернюю виртуальную машину, вы можете фактически получить соглашения CMs раньше и применить контекст к текущей виртуальной машине, но в этом случае вам нужно будет создать два вида, которые были почти идентичны, кроме области, как «поменять».

Мое предпочтение было бы создать ребенка VM для обработки суб-область, которая будет поменять взгляды, как я показал выше

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