C# 在Xamarin表单中,如何使选择器中的选定选项在其他选择器中不可见?

C# 在Xamarin表单中,如何使选择器中的选定选项在其他选择器中不可见?,c#,xaml,xamarin.forms,C#,Xaml,Xamarin.forms,我有7个选择相同的类似选择器。现在用户可以选择 选择器1中已在选择器2中选择的相同选项。我想知道在选择器中选择的用户是否在选择器2中不可见 我在谷歌上搜索过,但似乎没有人问过这个问题 void drainxy1() { drainlocationPicker1.Items.Add("1"); drainlocationPicker1.Items.Add("2"); drainlocationPicker1.Items.Add("3"); drainlocationPicker1.Items.Ad

我有7个选择相同的类似选择器。现在用户可以选择 选择器1中已在选择器2中选择的相同选项。我想知道在选择器中选择的用户是否在选择器2中不可见

我在谷歌上搜索过,但似乎没有人问过这个问题

void drainxy1()
{
drainlocationPicker1.Items.Add("1");
drainlocationPicker1.Items.Add("2");
drainlocationPicker1.Items.Add("3");
drainlocationPicker1.Items.Add("4");       
}
void drainxy2()
{
drainlocationPicker2.Items.Add("1");
drainlocationPicker2.Items.Add("2");
drainlocationPicker2.Items.Add("3");
drainlocationPicker2.Items.Add("4");       
}
void drainxy3()
{
drainlocationPicker3.Items.Add("1");
drainlocationPicker3.Items.Add("2");
drainlocationPicker3.Items.Add("3");
drainlocationPicker3.Items.Add("4");       
}
void drainxy4()
{
drainlocationPicker4.Items.Add("1");
drainlocationPicker4.Items.Add("2");
drainlocationPicker4.Items.Add("3");
drainlocationPicker4.Items.Add("4");       
}
<Picker x:Name="drainlocationPicker1" Title="Drain Location" />
<Picker x:Name="drainlocationPicker2" Title="Drain Location" />
<Picker x:Name="drainlocationPicker3" Title="Drain Location" />
<Picker x:Name="drainlocationPicker4" Title="Drain Location" />
/*
Picker1= select from 1,2,3,4
user selects = 2
picker2= select from 1,3,4
user selects = 3
Picker3= select from 1,4
user selects = 1
picker4= select from 4
user selects = 4 */


void drain1Handle_SelectedIndexChanged(object sender, System.EventArgs e)
{           
drainlocationPicker2.Items.RemoveAt(drainlocationPicker1.SelectedIndex);            
drainlocationPicker3.Items.RemoveAt(drainlocationPicker1.SelectedIndex);              `   drainlocationPicker4.Items.RemoveAt(drainlocationPicker1.SelectedIndex);                
}
xamlfile

<Label x:Name="drain3Label" Text="Drain 3: " Grid.Column="0" 
HorizontalTextAlignment="Center" VerticalTextAlignment="Center" />
<Picker x:Name="drainlocationPicker3" Title="Drain Location" Grid.Column="1"
SelectedIndexChanged="drain3Handle_SelectedIndexChanged"/> 

我创建了一个简单的演示。 这里是运行GIF


您可以通过以下代码实现。我创建了一个包含所有项目的列表。然后实现Jason所说的SelectedIndexChanged。注意:接下来,您需要自己判断用户的各种行为

  public partial class MainPage : ContentPage
{
    List<string> list;
    public MainPage()
    {
        InitializeComponent();
        list = new List<string>();
        list.Add("1");
        list.Add("2");
        list.Add("3");
        list.Add("4");
        drainxy1();
        drainxy2();
        drainxy3();
        drainxy4();


        drainlocationPicker1.SelectedIndexChanged += DrainlocationPicker1_SelectedIndexChanged;
        drainlocationPicker2.SelectedIndexChanged += DrainlocationPicker2_SelectedIndexChanged;
        drainlocationPicker3.SelectedIndexChanged += DrainlocationPicker3_SelectedIndexChanged;
        drainlocationPicker4.SelectedIndexChanged += DrainlocationPicker4_SelectedIndexChanged;



    }

    private void DrainlocationPicker4_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    private void DrainlocationPicker3_SelectedIndexChanged(object sender, EventArgs e)
    {

        drainlocationPicker4.Items.RemoveAt(drainlocationPicker3.SelectedIndex);
    }

    private void DrainlocationPicker2_SelectedIndexChanged(object sender, EventArgs e)
    {

        drainlocationPicker3.Items.RemoveAt(drainlocationPicker2.SelectedIndex);
        drainlocationPicker4.Items.RemoveAt(drainlocationPicker2.SelectedIndex);
    }

    private void DrainlocationPicker1_SelectedIndexChanged(object sender, EventArgs e)
    {


        drainlocationPicker2.Items.RemoveAt(drainlocationPicker1.SelectedIndex);
        drainlocationPicker3.Items.RemoveAt(drainlocationPicker1.SelectedIndex);
        drainlocationPicker4.Items.RemoveAt(drainlocationPicker1.SelectedIndex);

    }

    void drainxy1()
    {
        foreach (var item in list)
        {
            drainlocationPicker1.Items.Add(item);
        }
    }
    void drainxy2()
    {

        foreach (var item in list)
        {
            drainlocationPicker2.Items.Add(item);
        }
    }
    void drainxy3()
    {

        foreach (var item in list)
        {
            drainlocationPicker3.Items.Add(item);
        }
    }
    void drainxy4()
    {

        foreach (var item in list)
        {
            drainlocationPicker4.Items.Add(item);
        }
    }
}

您需要为每个选择器添加一个处理程序,以从所有其他选择器中删除所选项目。什么类型的处理程序?SelectedIndexChanged如果答复有用,请尝试将其标记为答复,这将帮助其他有类似问题的人。@hypnocool,此错误意味着drainlocationPicker3没有此索引,是否将所有项目添加到drainlocationPicker3,如以下代码void drainxy3{foreach var item in list{drainlocationPicker3.items.Additem;}}}}请解释这是做什么的?drainlocationPicker1.SelectedIndexChanged+=drainlocationPicker1\u SelectedIndexChanged;我检查了drain3,它就在那里。drainlocationPicker1.SelectedIndexChanged+=drainlocationPicker1\u SelectedIndexChanged当您单击drainlocationPicker1中的项目时,表示您已经选择了项目,选择索引已经更改,因此它将操作drainlocationPicker1\u SelectedIndexChanged方法。你可以上传你的演示。如果你可以重现这个问题,我可以帮助你解决这个问题。好的,运行你的代码,它可以工作,但是如果我在选择器1上选择1,那么选择器2,3,4缺少2。如果在选择器1上选择2,则选择器2,3,4缺少3。如果在选择器1上选择3,则选择器2、3、4缺少4。如果在选择器1上选择4,则错误索引超出范围。必须为非负数且小于集合的大小。参数名称:上面的类似索引的错误照片。