#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 для выбранного элемента.