2012-01-09 87 views
0

我使用列表框选择项目的手动限制为5列表框:如何在取消最大限制后取消选择/取消选择项目?

我尝试不同的方法,包括在其他一些相关问题,进行一些解决方案,但仍无法做到这一点。

我已经尝试过:this但我不能跟着使用“...附加到SelectionChanged事件”。我的意思是如何做到这一点?

this:但它会清除所有选定的项目而不会留下任何选定的项目。

甚至将.SelectedIndex设置为-1或null并发生相同的事情。它取消选择每个选定的项目。

等等

所有我想要做的就是,一旦限制开会取消(希望这是有意义的)最后一次选择的项目。

或者最糟糕的解决方案:我可以禁用我的列表框但仍显示选定的项目(意思还是突出显示)?

我试过最如果在的SelectionChanged和一些MOUSE_DOWN事件

回答

2

如果您按照您链接到答案,那么你到达这样的事情:

XAML

<ListBox x:Name="myListBox" SelectionChanged="myListBox_SelectionChanged" SelectionMode="Multiple"> 
... 
</ListBox> 

代码背后

void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    // remove items from the end until at most 5 items are in the list 
    while (myListBox.SelectedItems.Count > 5) 
    { 
     myListBox.SelectedItems.RemoveAt(SelectedItems.Count - 1); 
    } 
} 
+0

它的工作!谢谢! “如果”条件好而不是“时”。我的列表框被绑定到一个集合。 – Raf 2012-01-09 18:41:29

1

在WPF达到最大时,你可以禁用所有非选择项目:

<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem"> 
     <Style.Triggers> 
      <MultiDataTrigger> 
       <MultiDataTrigger.Conditions> 
        <Condition Binding="{Binding SelectedItems.Count, RelativeSource={RelativeSource AncestorType=ListBox}}" Value="5"/> 
        <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="false"/> 
       </MultiDataTrigger.Conditions> 
       <Setter Property="IsEnabled" Value="False"/> 
      </MultiDataTrigger> 
     </Style.Triggers> 
    </Style> 
</ListBox.ItemContainerStyle> 

(您可能希望以覆盖输入绑定虽然因为Ctrl+A仍将选择所有内容)

+0

再次感谢你。真的帮助我以其他方式,但在我的情况下,我现在想在代码背后做它,因为也许以后我会添加一些关于如何动态设置限制的逻辑。我真的很喜欢你的方法(而不是专注于选定的项目数量,你专注于其余未选定的项目),但我想再次执行一些有用的事件和代码 – Raf 2012-01-09 18:09:47