如何确定是否已以编程方式选择列表中的项目

时间:2013-12-13 04:42:26

标签: c# xaml windows-phone-7 windows-phone-8

我实际上有两个ListBox,用户可以选择从ListBox中选择一个项目。我想有办法确定一个项目是否已经从任一列表中选择,如果用户试图再次选择它。我不想通过在设备的屏幕上标记某种视觉来表明这一点,因为ListBox中的项目在选中时已经突出显示。我只想在用户从列表框中选择一个项目以确定是否已选择某个项目时执行检查,如果是,则显示消息并且不允许重新选择该项目。

XAML

<ListBox x:Name="ListBoxEffects" SelectionMode="Single" ItemsSource="{Binding}" Margin="{Binding}"
                     toolkit:TiltEffect.IsTiltEnabled="True" SelectionChanged="ListBox_SelectionChanged" />

        <ListBox x:Name="ListBoxEffects1" SelectionMode="Single" ItemsSource="{Binding}" Margin="{Binding}"
                     toolkit:TiltEffect.IsTiltEnabled="True" SelectionChanged="ListBox_SelectionChanged" />

如何跟踪已选择的内容和未选择的内容?要注意,ListBoxEffects有20个项目,ListBoxEffects1有10个项目,所以总共有30个项目。

5 个答案:

答案 0 :(得分:1)

由于列表中的项目较少,您可以将所选项目放入集合中,并可以在向其中添加新项目时通过此集合进行验证。如果该项目已存在,您可以显示一条消息。

答案 1 :(得分:0)

您可以绑定SelectedItem,然后您将获得在代码中选择的项目,并且您可以显示已经被选中的更多消息。

<ListBox x:Name="ListBoxEffects" SelectedItem="{Binding Model.SelectedList1Item,Mode=TwoWay}" SelectionMode="Single" ItemsSource="{Binding}" Margin="{Binding}"
                 toolkit:TiltEffect.IsTiltEnabled="True" SelectionChanged="ListBox_SelectionChanged" />

    <ListBox x:Name="ListBoxEffects1" SelectedItem="{Binding Model.SelectedList2Item,Mode=TwoWay}" SelectionMode="Single" ItemsSource="{Binding}" Margin="{Binding}"
                 toolkit:TiltEffect.IsTiltEnabled="True" SelectionChanged="ListBox_SelectionChanged" />

答案 2 :(得分:0)

在你的代码中,你已经有了SelectionChanged事件。你将通过使用SelectedValue属性获得selectedvalue。然后在SelectionChanged事件中,你可以检查selectedvalue并使用它来做你想做的任何事情。

答案 3 :(得分:0)

我的要求略有不同,但这种逻辑对我有用。

在xaml中将stackpanel设置在listbox datatemplate

    <datatemplate>
    <stackpanel tap="stk_Tap">
<!--list item template, whatever it is-->
    </Stackpanel>
    </Datatemplate>

现在在cs

只创建两个全局int变量

int previousselectedindexList1=-1;

int previousselectedindexList2=-1;

现在用于点击事件

 stk_Tap
    {
      if (previousselectedindexList1!= lbLocationHistory.SelectedIndex)
      {
        previousselectedindexList1= lbLocationHistory.SelectedIndex;
      }
      else
      {
        //your message here
        previousselectedindexList1= -1;
       }
    }

为其他列表框的堆叠面板制作相同的点击事件

希望这样的事情会有所帮助。

答案 4 :(得分:0)

    private void ListBox_SelectionChanged( object sender, SelectionChangedEventArgs e)
    {
        String lstbox = (sender as TextBox).Name;
        switch(lstbox)
        {

            case "ListBoxEffects":
                    if(ListBoxEffects.SelectedItem == ListBoxEffects1.SelectedItem)
                    {
                        MessageBox.Show("Item already selected");
                    }
                    else
                     //ur code
                break;

           case "ListBoxEffects1":
                if(ListBoxEffects.SelectedItem == ListBoxEffects1.SelectedItem)
                {
                    MessageBox.Show("Item already selected");
                }
                else
                     //ur code
                break;
        }

    }