Reputation: 10081
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
Reputation: 3
<Button IsEnabled="{Binding SelectedValue, ElementName=ListName, Mode=OneWay, TargetNullValue=0}" >Remove</Button>
that worked in my case
Upvotes: 0
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
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