我正在寻找一种方法将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解决方案吗?
3 回答
New Answer
对不起,我误解了这个问题 . 我会公开你的
DataContext
中的另一个属性,如果检查了集合中的所有项目,则只返回true / false,并使用DataTrigger
将你的Button的Text
/IsEnabled
基于该属性 .Old Answer
DataTriggers只需一个绑定,并检查结果是否等于某个值 .
如果您需要测试多个条件,则需要
MultiDataTrigger
请注意,setter的默认值是样式的一部分 . 这很重要,因为如果在
<TextBox>
上设置默认值,则它的优先级高于触发值,因此触发的值无法更改当前值 .你可以改变这一行......
对此
每当选中“完成”复选框时,在ViewModel中设置“ButtonContent”属性 .
通常,最好的方法是将要应用于按钮的状态合成到ViewModel的属性中 .
在这种情况下,WPFy方式是让ViewModel公开一个实现按钮操作的命令 . 该命令轮流可以对数据中的更改做出反应,以便在信号可用或不可用时发出信号,从而自动禁用/启用按钮 . 另外一个好处是,您可以轻松实现一个菜单,例如,一旦您获得命令,就可以免费正确启用/禁用该菜单 .
自从我有机会接触WPF以来已经很长时间了,所以我手边没有任何实用的链接,但如果我是你,我会学习WPF中的命令,它们是MVVM架构中非常重要的一部分 .