Ответ от Oluwasayo правильный, но я вижу, что вы уже используете MVVM, так что использование этого решения может быть лучше для вас, на тот случай, если вы хотите сохранить свой класс code-behind чистым и оставить все смешанные code-behind и ViewModelкод для одной функциональности.
Я не знаю, используете ли вы какой-то фреймворк MVVM или нет, но есть очень хороший и полезный behavior
, называемый EventToCommandBehavior
, который вы можете использовать для "перевода" любогособытие и связать его с командой в вашей ViewModel.
Вы можете найти реализацию этого здесь на GitHub, вы можете легко включить его в свой проект.Существует множество других реализаций из сред MVVM.
Шаги, чтобы сделать это так, как я вам советую:
Включите этот класс в свой проект, и вы сможетеиспользуйте его на страницах xaml.
Отредактируйте код VM и добавьте несколько дополнительных строк кода.
Код модели представления:
// Property for binding SelectedItem from ListView.
private Profile _selectedProfile;
public Profile SelectedProfile
{
get { return _profiles; }
set
{
_selectedProfile= value;
OnPropertyChanged();
}
}
// Command which we will use for Event to Command binding.
public DelegateCommand ItemTappedCommand{ get; private set; }
// ...
// Code inside of the ctor in VM:
ItemTappedCommand = new Command(ItemTapped);
// ...
// Method which will be executed using our command
void ItemTapped()
{
// Here you can do whatever you want, this will be executed when
// user clicks on item in ListView, you will have a value of tapped
// item in SlectedProfile property
}
Отредактируйте код своей страницы XAML и добавьте несколько строк кода.
Страница XAML:
<!-- In your page xaml header add xaml namespace to EventToCommandBehaviour class-->
xmlns:b="clr-namespace:Namespace.ToYour.EventToCommandBehaviourClass"
<ListView x:Name="ProfileDetails" ItemsSource="{Binding Profiles}"
SelectedItem={Binding SelectedProfile}>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Margin="20,0,0,0" Orientation="Horizontal" HorizontalOptions="FillAndExpand">
<Label Text="{Binding ProfileType}" VerticalTextAlignment="Center" HorizontalOptions="StartAndExpand" TextColor="LightGray"/>
<Label Text="{Binding ProfileChamber}" VerticalTextAlignment="Center" HorizontalOptions="StartAndExpand" TextColor="LightGray"/>
<Label Text="{Binding ProfileWidhtMM}" VerticalTextAlignment="Center" HorizontalOptions="StartAndExpand" TextColor="LightGray"/>
<Label Text="{Binding ProfilePrice}" VerticalTextAlignment="Center" HorizontalOptions="StartAndExpand" TextColor="LightGray"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.Behaviors>
<b:EventToCommandBehavior EventName="ItemTapped"
Command="{Binding ItemTappedCommand}" />
</ListView.Behaviors>
</ListView>
Надеюсь, что это имеет смысл для вас, при использовании этого подхода ваш код позадикласс останется чистым, не смешивая код между vm и code-behind, просто мой совет для вас.
Желаю вам удачи с кодированием!