根据ListBox.SelectedIndex在WPF中启用按钮

34
我有一个经典的UI情况 - 两个名为SelectedItemsAvailableItems的ListBox - 其中,你已经选择的项目位于SelectedItems中,可以添加到SelectedItems(即不在其中的每个项目)中的项位于AvailableItems中。
此外,我还有<>按钮,可以将当前选定内容从一个列表移动到另一个列表(除了双击之外,这也有效)。
在WPF中是否有可能设置样式/触发器来启用或禁用移动按钮,具体取决于 ListBox 中是否选择了任何内容?SelectedItems在左侧,因此<按钮将把所选的AvailableItems移动到该列表中。但是,如果没有选择任何项目(AvailableItems.SelectedIndex == -1),则希望此按钮被禁用(IsEnabled == false)-对于另一个列表/按钮也是如此。
这是否可以直接在XAML中完成,还是需要创建复杂的代码后端逻辑来处理它?

2
如果你所谓的“有趣”是指完全、完全可怕,唯一使它更糟糕的方式就是用正则表达式,那么,是的,这很有趣。 - Andrew Bullock
1
@Will 这是一个很好的比喻,因为我很想用橡胶锤子砸坚果。 - Cranston
3个回答

84

更少的代码解决方案:

<Button Name="button1" IsEnabled="{Binding ElementName=listBox1, Path=SelectedItems.Count}" />
如果计数为0,则似乎对应false,>0则对应true。

另一个答案的好处是,您可以将其用于2个列表,这两个列表都必须选择了某些内容才能启用按钮。 - Berty
只有当ListView至少有一个项目时,问题才是在选择项目时启用按钮。 - luka

55

这是您的解决方案。

<Button Name="btn1" >click me    
    <Button.Style>        
        <Style>            
            <Style.Triggers>                
                <DataTrigger 
                     Binding ="{Binding ElementName=list1, Path=SelectedIndex}" 
                     Value="-1">                    
                    <Setter Property="Button.IsEnabled" Value="false"/>                    
                </DataTrigger>                
            </Style.Triggers>            
        </Style>        
    </Button.Style>    
</Button>

0
 <Button IsEnabled="{Binding SelectedValue, ElementName=ListName, Mode=OneWay, TargetNullValue=0}" >Remove</Button>

在我的情况下有效


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接