I want the Button control’s property to be IsEnabled="False" until a value is entered into a TextBox in the Window.
Code so far:
<Button
Content="Click Me"
Name="ClickMe"
VerticalAlignment="Top"
Click="ClickMe_Click">
<Button.Style>
<Style>
<Style.Triggers>
<DataTrigger
Binding="{Binding ElementName=textBox, Path=Length}"
<!-- or even: Binding="{Binding Path=textBox.Length}" -->
Value="0">
<Setter
Property="Button.IsEnabled"
Value="false" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Also, is it possible to have this Button control’s IsEnabled property be based on 3 different TextBox controls all having values?
Assuming you are employing a presentation model, such as a ViewModel, you should bind directly the data instead of the UI elements.
That said, if you are using a presentation model, you can always add a
bool"EnableSave" property and handle all the presentation logic there instead of in the view itself.update
As can be seen by following the comments, I mistakenly set this up to enable the
Buttonwhen anyTextBoxhas a value, but the requirement is that theButtonbe enabled when allTextBoxes have values.Conceptually, all you have to do is reverse the conditions — instead of "false if all conditions false," we want "true if all conditions true."
The catch is that there is no way to say "not null" in the XAML — no way without an
IValueConverter, that is. I’d create aNullToBoolConverterthat returnsfalsefornullandtruefor!= null.Given such a converter: