Joh*_*hnB 7 .net wpf xaml binding
我希望Button控件的属性IsEnabled="False"直到将值输入到a TextBox中Window.
代码到目前为止:
<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>
Run Code Online (Sandbox Code Playgroud)
此外,是否可以将此Button控件的IsEnabled属性基于3个TextBox具有值的不同控件?
假设您使用的是演示模型,例如ViewModel,则应直接绑定数据而不是UI元素.
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding FirstName}" Value="{x:Null}" />
<Condition Binding="{Binding MiddleName}" Value="{x:Null}" />
<Condition Binding="{Binding LastName}" Value="{x:Null}" />
</MultiDataTrigger.Conditions>
<Setter Property="Button.IsEnabled" Value="False" />
</MultiDataTrigger>
</Style.Triggers>
Run Code Online (Sandbox Code Playgroud)
也就是说,如果您使用的是演示模型,则可以随时添加bool"EnableSave"属性并处理其中的所有表示逻辑,而不是在视图本身中.
由于可以通过以下的评论中可以看出,我错误地将此设为启用Button时,任何 TextBox具有价值,但要求是,Button当启用所有 TextBox ES具有值.
从概念上讲,你所要做的就是扭转条件 - 而不是"假如果所有条件都是假的",我们希望"如果所有条件都是真的,则为真".
问题是,在XAML中没有办法说"not null" - 没有办法IValueConverter,就是这样.我会创建一个NullToBoolConverter返回falsefor null和truefor != null.
鉴于这样的转换器:
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding FirstName,
Converter={StaticResource NullToBoolConverter}}" Value="True" />
<Condition Binding="{Binding MiddleName,
Converter={StaticResource NullToBoolConverter}}" Value="True" />
<Condition Binding="{Binding LastName,
Converter={StaticResource NullToBoolConverter}}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Button.IsEnabled" Value="True" />
</MultiDataTrigger>
</Style.Triggers>
Run Code Online (Sandbox Code Playgroud)