2010-03-02 58 views
0

说我有一个WPF XAML代码如下WPF ListBoxItem中选择

<Grid> 
    <Grid.ColumnDefinition> 
     <!--2 Columns are defined--> 
    </Grid.ColumnDefinition> 

    <Button x:Name="button" Grid.Column="1"/> 
    <ListBox x:Name="listBox" Grid.Column="2"/> 

    </Grid> 

现在,每次listboxitems被绑定到一个类的一个对象与名为“状态”构件。每当选择一个项目时,状态变为“0”。如果未选中状态变为“1”。

现在,我的问题是,只要有任何“状态”项分别变为“0”或“1”,我如何禁用/启用按钮(在XAML中)。有没有办法通过DataTriggers做到这一点

感谢

回答

1

这取决于代码的位置。如果它位于DataTemplate或ControlTemplate中,则可以使用DataTrigger。如果不是(或者即使是),你也应该能够通过直接绑定获得相同的效果。无论哪种情况,您都可以使用相同的基本方法。如果您创建一个接收listBox项目(收集数据对象)并根据Status值输出布尔值的IValueConverter,您可以使用它来绑定按钮的IsEnabled,或者检查DataTrigger中的值并根据需要禁用。

如果您在选择/未选中时指的是ListBox选择,那么您甚至不需要查看状态值本身。如果你是一个模板中(可以使用触发器),你也可以只检查ListBox中是否有任何选择的项目:

<DataTrigger Binding="{Binding ElementName=listBox, Path=SelectedItems.Count}" Value="0"> 
    <Setter TargetName="button" Property="IsEnabled" Value="False" /> 
</DataTrigger> 
+0

问题是我不能使用SelectedItems.Count属性。 原因是,就我而言,listBox datatemplate提供了一个用于选择/取消选择功能的ToggleButton(哪个列表框选择不提供)。切换按钮绑定到“状态” 所以,有没有办法通过DataTrigger从列表框的数据模板部分访问同级元素(在这种情况下是按钮)? 还有一个关于使用valueconverter的问题。你是否意味着将按钮的Datacontext设置为listbox.Items并将它与转换器绑定在一起? – SysAdmin 2010-03-02 16:02:02

0

您可以使用Selection_Changed事件处理程序?

0

只是一定要做出相应的触发启用按钮时值为1 Ardman,你可以使用Selection_Changed事件处理程序,但我总是尽可能地在XAML中做尽可能多的事情,并保持UI代码不在代码背后。有时它有效,每隔一段时间它都不会。

科里斯