如何在 Xamarin 中获取选中的项目

How to get selected item in Xamarin

我在 Xamarin 中有一个选择器,我想将选择器中的选定项目传递到另一个页面(Table页面)。在这个选择器下面有一个按钮,只要点击它我就想转到另一个页面并在 pther 页面中显示所选的值。

<Picker x:Name="SelectTablePicker" Title="Select table" TextColor="#676FA3" TitleColor="#676FA3" FontSize="Title" ItemsSource="{Binding TablesFromViewModelCollector}" ItemDisplayBinding="{Binding Name}" SelectedItem="{Binding SelectedTable}" />
<Button x:Name="SelectTableButton" Text="Select Table" HorizontalOptions="Center" Style="{DynamicResource TitleStyle}" Clicked="Selected_Button" />

所以我尝试传递此值的方式是通过点击事件:

async void Selected_Button(object sender, System.EventArgs e)
        {
            var SelectTablePicker = (Picker)sender;
            int selectedIndex = SelectTablePicker.SelectedIndex;

            if (selectedIndex != -1)
            {
                await Navigation.PushAsync(new TablePage((string)SelectTablePicker.ItemsSource[selectedIndex]));
            }
            
        }

然后在 Table 页面上,我在要显示所选项目的位置创建了标签:

<Label x:Name="MyLabel" Text="#" HorizontalOptions="Fill"  Grid.Column="0" BackgroundColor="#FF5959" TextColor="#EEF2FF" HorizontalTextAlignment="Left" Padding="0, 0, 0, 10" VerticalTextAlignment="Center"/>

这里是它的控制器:

public TablePage(string tableName)
        {
            InitializeComponent();

            MyLabel.Text = $"{UserName}";
        }

但是每当我点击按钮时,我都会收到一个错误,我不知道为什么。

这是一个按钮点击事件,所以sender是一个Button,而不是Picker

var SelectTablePicker = (Picker)sender;
int selectedIndex = SelectTablePicker.SelectedIndex;

而只是这样做

// SelectTablePicker is the name of your picker
int selectedIndex = SelectTablePicker.SelectedIndex;

更好的是,您已经绑定了 SelectedItem="{Binding SelectedTable}",因此您可以直接从 VM

获取 SelectedTable 的值

最后,您想将所选项目转换为 Table,而不是 string

new TablePage((Table)SelectTablePicker.ItemsSource[selectedIndex])