Как мы можем определить вид выбранного элемента из сборщик в Xamarin?
У нас есть одно представление, т.е. SearchPage.xaml .И одна ViewModel этого представления, т.е. SearchPageVm.cs .У нас есть несколько средств выбора, и элементы управления доступны на странице поиска.
У нас есть пять вкладок, т.е. Tab1, Tab2, Tab3, Tab4, Tab5.И каждая вкладка содержит вид страницы поиска.Пожалуйста, обратите внимание, что здесь мы создаем один экземпляр модели представления Page Search и один и тот же экземпляр привязывается к каждому новому экземпляру SearchPageView, который используется на разных вкладках.
Если выбрана вкладка Tab1 и пользователь выбираетпредмет сборщика1.Свойство SelectItem, привязанное к Picker1, доступно в SearchPageVm.Мы получаем 5 вызовов, и мы не можем определить, какой View вызывает этот вызов.
Мы хотим выполнить действие, но только один раз.
Пример кода:
SearchPage.xaml
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:System="clr-namespace:System;assembly=netstandard"
xmlns:SearchVm="clr-namespace:MyApplication.ViewModel;assembly=MyApplication"
x:Class="MyApplication.Views.SearchPage"
BindingContext="{x:Static SearchVm:CommonDataCache.SearchPageVmInstance}">
<ScrollView Orientation="Both" IsClippedToBounds="True" Padding="0,0,10,0">
<StackLayout x:Name="ControlStackLeft">
<customControls:SearchPageGrid
VisibleOnPages="Tab1,Tab2,Tab3,Tab4,Tab5">
<Label Grid.Row="0" Grid.Column="0" Text="Item1" />
<Picker Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2"
HorizontalOptions="FillAndExpand"
ItemsSource="{Binding Item1List}"
ItemDisplayBinding="{Binding Name}"
SelectedItem="{Binding SelectItem1,Mode=TwoWay}" />
</customControls:SearchPageGrid>
</StackLayout>
</ScrollView>
SearchPageVm.cs:
private string _selectedItem1;
public string SelectedItem1
{
get => _selectedItem1;
set
{
_selectedItem1 = value;
OnPropertyChanged(nameof(SelectedItem1));
if (SelectedItem1 != null)
//Perform some Action
}
}
Tab1.xaml:
<StackLayout Orientation="Vertical" Margin="0,0,0,0" Grid.Row="0">
<ScrollView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Orientation="Horizontal"
IsClippedToBounds="True">
<views:SearchPage x:Name="SearchView" />
</ScrollView>
</StackLayout>