如何在 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])
我在 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])