Rune Jacobsen
Rune Jacobsen

Reputation: 10081

Enabling a button in WPF depending on ListBox.SelectedIndex

I have a rather classic UI situation - two ListBoxes named SelectedItems and AvailableItems - the idea being that the items you have already selected live in SelectedItems, while the items that are available for adding to SelectedItems (i.e. every item that isn't already in there) live in AvailableItems.

Also, I have the < and > buttons to move the current selection from one list to the other (in addition to double clicking, which works fine).

Is it possible in WPF to set up a style/trigger to enable or disable the move buttons depending on anything being selected in either ListBox? SelectedItems is on the left side, so the < button will move the selected AvailableItems to that list. However, if no items are selected (AvailableItems.SelectedIndex == -1), I want this button to be disabled (IsEnabled == false) - and the other way around for the other list/button.

Is this possible to do directly in XAML, or do I need to create complex logic in the codebehind to handle it?

Upvotes: 35

Views: 27902

Answers (3)

Zufar
Zufar

Reputation: 3

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

that worked in my case

Upvotes: 0

user1228
user1228

Reputation:

Here's your solution.

<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>

Upvotes: 56

Karlas
Karlas

Reputation: 981

Less code solution:

<Button Name="button1" IsEnabled="{Binding ElementName=listBox1, Path=SelectedItems.Count}" />

If count is 0 that seems to map to false, > 0 to true.

Upvotes: 84

Related Questions