首页 > 解决方案 > 我们如何识别 Xamarin 中选择器的选定项的视图?

问题描述

我们如何识别Xamarin中选择器的选定项的视图?

我们有一个视图,即SearchPage.xaml。这个视图的一个 ViewModel 即SearchPageVm.cs。我们有多个选择器,并且搜索页面中提供了控件。

我们有五个选项卡,即 Tab1、Tab2、Tab3、Tab4、Tab5。每个选项卡都包含搜索页面视图。请注意,我们正在创建 Search Page 视图模型的单个实例,并且同一个实例绑定到不同选项卡中使用的 SearchPageView 的每个新实例。

如果选择了 Tab1 并且用户选择了 Picker1 的一项。绑定到 Picker1 的 SelectItem 属性在 SearchPageVm 中可用。我们接到了 5 个电话,但我们无法确定哪个 View 正在调用它。

我们想执行一个动作,但只执行一次。

示例代码:

搜索页面.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>

标签: c#xamlxamarinmvvm

解决方案


推荐阅读