Как передать данные из viewmodel в view

#c# #silverlight #mvvm-light

#c# #silverlight #mvvm-light

Вопрос:

У меня есть приложение silverlight для Windows phone 8.1, и я использую MVVMLight toolkit. У меня есть три ViewModel: Main, PivotItem и Item. В MainViewModel у меня есть наблюдаемая коллекция PivotItem, а в PivotItemViewModel — наблюдаемая коллекция ItemViewModel и, наконец, в ItemViewModel у меня есть свойства для элемента.

Это MainPage.xaml:

 <phone:Pivot Title="{Binding Title}" ItemsSource="{Binding PivotItemViewModels}">
            <phone:Pivot.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Header}" />
                </DataTemplate>
            </phone:Pivot.HeaderTemplate>
            <phone:Pivot.ItemTemplate>
                <DataTemplate>
                    <phone:LongListSelector x:Name="LongListSelector" ItemsSource="{Binding ItemViewModels}">
                        <phone:LongListSelector.ItemTemplate>
                            <DataTemplate>
                                <StackPanel>
                                    <TextBlock Text="{Binding Tipus}" />
                                    <TextBlock Text="{Binding Megjegyzes}" />
                                </StackPanel>
                            </DataTemplate>
                        </phone:LongListSelector.ItemTemplate>
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="Tap">
                                <commands:EventToCommand Command="{Binding SelectedCommand,
                                                                           Mode=OneWay}"
                                                         CommandParameter="{Binding Path=SelectedItem,
                                                                                    ElementName=LongListSelector}"
                                                         PassEventArgsToCommand="False" />
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                    </phone:LongListSelector>
                </DataTemplate>
            </phone:Pivot.ItemTemplate>
        </phone:Pivot>
 

И для события нажатия LongListSelector я хочу передать выбранный элемент в мой EditView.

Вот моя SelectedCommand в PivotItemViewModel:

 public RelayCommand<ItemViewModel> SelectedCommand { get; set; }

private void Edit(ItemViewModel item)
        {

            ApplicationController.Default.NavigateTo(ViewType.Edit);            
        }

public PivotItemViewModel()
        {
            SelectedCommand = new RelayCommand<ItemViewModel>(Edit);
        }
 

Мой первый вопрос заключается в том, какую ViewModel мне следует использовать, PivotItemViemModel или ItemViewModel для datacontext EditView в EditView? И как мне передать выбранный элемент в представление?

Комментарии:

1. Вы хотите передать выбранный элемент из View в ViewModel, верно?

2. Не совсем. Он уже передан в viewmodel, и я хочу отправить его из MainViewModel в ItemViewModel и использовать его в качестве datacontext для моего EditView. Хотя я уже решил эту проблему, я открыт для идей, потому что мне не нравится, как я это сделал. Я добавил другой метод NavigateTo с параметром в свой NavigationService, и я использую свой метод GetNavigationData для установки datacontext для выбранного элемента.