У меня есть ListView, и когда Item открывает ItemTapped View Compose на 3 разных страницах, я хочу получить на этих страницах объект, который я предварительно нажал в ListView, чтобы показать его в текстовой метке.
Конечно! Это мой Xaml-контейнер с вкладками
<TabbedPage.Children>
<views:Page1>
<views:Page1.BindingContext>
<viewModels:MainViewModel/>
</views:Page1.BindingContext>
</views:Page1>
<views:Page2>
<views:Page2.BindingContext>
<viewModels:MainViewModel/>
</views:Page2.BindingContext>
</views:Page2>
</TabbedPage.Children>
Это мой MainViewModel
public class MainViewModel : INotifyPropertyChanged
{
private string _selectedProduct;
private string _purchasedProducts = "You purchased: ";
public List<string> Products => new List<string>
{
"Computer", "Smartphone", "Tablet", "Keyboard", "Mouse", "Screen", "Headset"
};
public string SelectedProduct
{
get { return _selectedProduct; }
set
{
_selectedProduct = value;
OnPropertyChanged();
}
}
public string PurchasedProducts
{
get { return _purchasedProducts; }
set
{
_purchasedProducts = value;
OnPropertyChanged();
}
}
public ICommand SelectCommand => new Command(() =>
{
PurchasedProducts += SelectedProduct + ", ";
Application.Current.MainPage.Navigation.PushModalAsync(new ContainerPage());
});
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Моя главная страница, где у меня есть ListView
<ContentPage.BindingContext>
<local:MainViewModel />
</ContentPage.BindingContext>
<StackLayout Orientation="Vertical" Padding="40" Spacing="40">
<Label Text="{Binding PurchasedProducts}" />
<ListView ItemsSource="{Binding Products}" SelectedItem="{Binding SelectedProduct}">
<ListView.Behaviors>
<local:ItemSelectedToCommandBehavior Command="{Binding SelectCommand}" />
</ListView.Behaviors>
</ListView>
</StackLayout>
И, наконец, моя страница Page1 содержится в TabbedPage, где я хочу получить ViewModel Data
<ContentPage.Content>
<StackLayout>
<Label Text="{Binding PurchasedProducts}" />
</StackLayout>
</ContentPage.Content>
Когда я запускаю проект с помощью инструмента отладки, я вижу, что в Page1
<Label Text="{Binding PurchasedProducts}" />
я получаю выбранное значение, но затем когда код выполняется
Command.Execute(null);
, он стирает это значение из
<Label Text="{Binding PurchasedProducts}" />