我正在寻找一种方法将Button Text或IsEnabled属性绑定到ItemsControl中的IsChecked属性 这是我的简化源代码:
<StackPanel>
<ItemsControl ItemsSource="{Binding Tasks}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="10,0,10,0" Text="{Binding Name}"/>
<CheckBox IsChecked="{Binding InProgress}"/>
<CheckBox IsChecked="{Binding Done}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button/>
</StackPanel>
我希望(例如)检查所有“完成”复选框,将按钮文本设置为某个值或启用它。我认为使用DataTriggers在Xaml中使用Data Binding进行此操作但我不知道该怎么做。 Ca有人给我一个完整的xaml解决方案吗?
答案 0 :(得分:1)
新答案
对不起,我误解了这个问题。如果系统中的所有项目都已选中,我会从您的DataContext
中公开另一个属性,只返回true / false,并使用一个属性将您的Button的Text
/ IsEnabled
基于该属性DataTrigger
<Style TargetType="{x:Type Button}">
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsAllChecked}" Value="True">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
<小时/> 旧答案
DataTriggers只需一个绑定,并检查结果是否等于某个值。
<Style TargetType="{x:Type TextBox}">
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<DataTrigger Binding="{Binding Done}" Value="True">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
如果您需要测试多个条件,则需要MultiDataTrigger
<Style TargetType="{x:Type TextBox}">
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=InProgress}" Value="True" />
<Condition Binding="{Binding Path=Done}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
请注意,setter的默认值是样式的一部分。这很重要,因为如果您在<TextBox>
上设置默认值,那么它的优先级高于触发值,因此触发的值无法更改当前值。
答案 1 :(得分:0)
您可以更改此行...
<Button/>
到此
<Button Content={Binding ButtonContent}/>
只要您选中“完成”复选框,就会在ViewModel中设置“按钮内容”属性。
答案 2 :(得分:0)
通常,最好的方法是将要应用于按钮的状态合成到ViewModel的属性中。
在这种情况下,WPFy方式是让ViewModel公开一个实现按钮操作的命令。 该命令轮流可以对数据中的更改做出反应,以便在信号可用或不可用时发出信号,从而自动禁用/启用按钮。另外一个好处是,您可以轻松实现一个菜单,例如,一旦您掌握了命令,就可以免费正确启用/禁用该菜单。
自从我有机会接触WPF已经有很长一段时间了,所以我手边没有任何实用的链接,但如果我是你,我会学习WPF中的命令,它们是WPF的一个非常重要的部分。 MVVM架构。