【问题标题】:WPF ListBoxItem SelectionWPF ListBoxItem 选择
【发布时间】:2010-03-02 22:35:45
【问题描述】:

假设我有一个 WPF XAML 代码,如下所示

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

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

  </Grid>

现在,每个列表框项都绑定到具有名为“Status”的成员的类的对象。 Whenever an item is selected, Status becomes "0".如果未选中状态变为“1”。

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

谢谢

【问题讨论】:

    标签: c# .net wpf


    【解决方案1】:

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

    如果您在说选择/未选择时指的是列表框选择,那么您甚至不需要查看状态值本身。如果您在模板中(可以使用触发器),您还可以检查 listBox 是否有任何选定的项目:

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

    【讨论】:

    • 问题是我不能使用 SelectedItems.Count 属性。原因是,在我的情况下,列表框数据模板为选择/取消选择功能提供了一个切换按钮(列表框选择不提供)。切换按钮绑定到“状态” 那么,有没有办法通过 DataTrigger 从 ListBox 的数据模板部分访问兄弟元素(在本例中为按钮)?还有一个关于使用 valueconverter 的问题。您的意思是要将按钮的 Datacontext 设置为 listbox.Items 并将其与转换器一起绑定吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      只要确保在值为 1 时启用相应的触发器即可启用按钮。Ardman,您可以使用 Selection_Changed 事件处理程序,但我总是尽量在 XAML 中做尽可能多的事情,并将 UI 更改排除在后面的代码。有时它有效,但时不时地无效。

      科里

      【讨论】:

        猜你喜欢
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 2011-05-22
        • 1970-01-01
        • 2012-01-23
        相关资源
        最近更新 更多