Как создавать и отображать представления по запросу команды?

Я начал использовать набор инструментов mvvm-light и новичок в WPF.

Мой вопрос: я хочу создать приложение, в котором главное окно включает сетку с двумя столбцами, 1 команда col, а col2 будет отображать представления при нажатии каждой команды. я хочу, чтобы представления создавались по команде и закрывались из собственного представления.

Я пытался понять, как это сделать, но безуспешно.

Я не знаю, как написать такую ​​функциональность, используя свет mvvm.

Я просто знаю, как создать главное окно с основным видом и другим видом, созданным уже при загрузке.

Пожалуйста, помогите мне..

Я использую 2008 WPF3.5

Ширли. Порадуй меня сегодня..у меня неделя только началась!!!

Спасибо. Я сделал это и получил в результате Tostring() текущей ViewModel "LU.ViewModel.AllChannelsViewModel", а не реальный вид.

вид, который я хочу загрузить: я использую mvvm-light

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="30" />
        <RowDefinition Height="30" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <Button Grid.Row="0" Height="22" HorizontalAlignment="Right" Margin="8,4,0,0" Name="closebutton" VerticalAlignment="Top" Width="100" Command="{Binding CloseCommand}">Close</Button>
    <Button Grid.Row="1" Height="22" HorizontalAlignment="Left" Margin="8,4,0,0" Name="button1" VerticalAlignment="Top" Width="100" Command="{Binding GetChannelsCommand}">Load Channels</Button>
    <Button Grid.Row="1" Height="22" HorizontalAlignment="Right" Margin="8,4,0,0" Name="button2" VerticalAlignment="Top" Width="100" Command="{Binding NewChannelCommand}">New Channel</Button>
    <dg:DataGrid   Grid.Row="2"  ItemsSource="{Binding AllChannelsData}" Margin="0,30,0,0" />


</Grid>

Что мне здесь не хватает? Как я могу показать реальный вид, который я хочу, а не имя модели представления?

Ширли


person Shirly    schedule 13.06.2010    source источник


Ответы (2)


Я не знаю, есть ли что-то конкретное для этого с MVVM Light, но распространенный способ создать представление в MVVM — создать ContentControl, привязанный к свойству ViewModel. Когда вы воздействуете на новую ViewModel на это свойство, ContentControl отображает его, используя DataTemplate, соответствующий типу ViewModel:

<!-- In resources -->
<DataTemplate DataType="{x:Type vm:FooViewModel}">
    <v:FooView />
</DataTemplate>

<DataTemplate DataType="{x:Type vm:BarViewModel}">
    <v:BarView />
</DataTemplate>
...

<!-- In the main view -->

<ContentControl Content="{Binding Current}" />
person Thomas Levesque    schedule 13.06.2010
comment
Я думаю, что этот человек имел в виду создание представления, которое можно было бы открыть с помощью команды. - person ; 01.12.2011
comment
@ Брайан, ты думаешь, но не знаешь, и ОП так и не вернулся, чтобы доказать, что ты неправ или прав, поэтому я не думаю, что это заслуживает отрицательного голоса. ... - person Thomas Levesque; 01.12.2011
comment
Томас, спасибо за ответ. Когда я использовал слово «думать», это означало быть вежливым, а не быть всезнайкой. Текст, который они написали, конкретно гласит: ... для отображения представлений при нажатии каждой команды. Я хочу, чтобы представления создавались по команде... Сама природа этого предполагает, что они хотят щелкнуть кнопку, привязанную к команде, которая открывает представление. Точно так же их xaml содержит две кнопки, которые предполагают, что они понимают, как создать представление. Итак, я поддерживаю свой голос против. Извините, если это вас оскорбляет. - person ; 02.12.2011
comment
@ Брайан, я не обижен, я просто не думаю, что этот ответ того заслуживает ... Мой ответ все еще работает в этом сценарии: например, если ContentControl привязан к свойству, команда может изменить это свойство, что отобразит другое представление в ContentControl. Я постоянно использую этот метод... - person Thomas Levesque; 02.12.2011

Пожалуйста, простите меня за то, что я дал вам вариант, которого нет в наборе инструментов MVVM Light, но я уже прошел тот путь, которым вы идете, и решил использовать Prism именно по этой причине. У меня нет времени вдаваться в детали Prism или агрегаторов событий, но в этом инструменте вы бы:

  1. В вашей модели представления создайте ICommand, к которому вы привязываете свою кнопку или события.
  2. Выполняемая вами команда вызовет агрегатор событий с методом publish. Это событие, которое вы уже настроили вне своей виртуальной машины и ожидаете вызова. При вызове событие показывает вашу форму. Вы даже можете передавать свойства или даже другие виртуальные машины в событие. Это позволяет вашей виртуальной машине не знать о представлении.

Наконец, MVVM был для меня замечательным, но он предложит вам много проблем, таких как эта. Не ожидайте, что сможете победить его за один день или быстро создать приложения, но когда вы все наводите порядок, это хорошая парадигма.

person Community    schedule 01.12.2011