【问题标题】:Trigger when `SelectedIndex` greater than 0当 `SelectedIndex` 大于 0 时触发
【发布时间】:2011-06-08 14:33:16
【问题描述】:

如何在ComboBox上设置触发器,当SelectedIndex大于0时(基本上,选择时选项)另一个ComboBox获取修改。我有两个ComboBoxes,但用户只能从其中一个中选择。因此,如果我从 ComboBox A 中选择第一个选项,那么 ComboBox B 应该得到 SelectedIndex 的 0 ,反之亦然。

我尝试过以下操作,但不确定如何捕获所需的逻辑。

<ComboBox ItemsSource="{Binding AvailableStatuses}"
          SelectedItem="{Binding SelectedStatus}"
          Grid.Row="1" Grid.Column="1" DisplayMemberPath="Name" 
          x:Name="Statuses">
    <ComboBox.Style>
        <Style TargetType="{x:Type ComboBox}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=Decisions}" Value="0">
                    <Setter Property="SelectedIndex" Value="0" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>

我应该查看什么样的触发器?

【问题讨论】:

    标签: wpf xaml triggers selection mutual-exclusion


    【解决方案1】:

    我认为在 ViewModel 中使用这个逻辑会简单得多,无论您的“SelectedStatus”属性在哪里。如果传入的值大于 0,则将另一个属性(“SelectedStatus2”?)设置为 0,反之亦然。

    【讨论】:

    • 我同意 Ben K 的观点。如果可能的话,仅在 XAML 中执行此操作将非常棘手。要么将逻辑编码到 VM 中,要么在视图中使用代码。另一种方法是编写一个用户控件,其中包含一个带有组合框作为项目的项目控件。然后,用户控件将有代码强制只选择一个组合框。
    【解决方案2】:

    为什么不将ComboBox B 的SelectedIndex 属性绑定到ComboBox A 的SelectedIndex 属性?

    【讨论】:

      【解决方案3】:

      如果 SelectedIndex 大于 0,您可以编写一个返回 True/False 的转换器

      <DataTrigger Binding="{Binding ElementName=Decisions, 
          Converter={StaticResource IsValueGreaterThanZeroConverter}}" Value="True">
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-28
        • 1970-01-01
        • 1970-01-01
        • 2020-09-25
        • 1970-01-01
        相关资源
        最近更新 更多