SelectedIndex DataTrigger 在组合框中不起作用

本文关键字:不起作用 组合 DataTrigger SelectedIndex | 更新日期: 2023-09-27 18:35:08

我想做的是,如果一个组合框只有 1 个项目,那么它就会被预先选中。我尝试使用数据触发器,但它不适用于"选定索引"属性。但是当我将"IsEnabled"属性设置为 false 时,它的工作并禁用组合框。

下面是我的代码:

<ComboBox  Name="WarehouseCombo" 
      ItemsSource="{Binding Path=WarehouseList}"
      SelectedValue="{Binding Warehouse,Mode=TwoWay}"
      Text="{Binding Path=TxtWarehouse,Mode=TwoWay}">
        <ComboBox.Style>
              <Style TargetType="{x:Type ComboBox}">
                    <Style.Triggers>
                         <DataTrigger
                              Binding="{Binding Path=Items.Count, ElementName=WarehouseCombo}" Value="1">
                                  <Setter Property="SelectedIndex" Value="0" />
                          </DataTrigger>
                     </Style.Triggers>
               </Style>
         </ComboBox.Style>
 </ComboBox>

请帮助我,为什么在"选定索引"情况下会发生这种情况。

SelectedIndex DataTrigger 在组合框中不起作用

不要使用 SelectedIndex 属性。请改用 SelectedItem 属性。满足要求的一种方法是为数据收集声明基类。尝试这样的事情:

public WarehouseList : ObservableCollection<WarehouseItems>
{
    private T currentItem;
    public WarehouseList() { }
    public T CurrentItem { get; set; } // Implement INotifyPropertyChanged here
    public new void Add(T item)
    {
        base.Add(item);
        if (Count == 1) CurrentItem = item;
    }
}

现在,如果您使用此类而不是标准集合,它将自动将第一项设置为选定项。若要在 UI 中执行此操作,只需将此属性数据绑定到 SelectedItem 属性,如下所示:

<DataGrid ItemsSource="{Binding WarehouseList}" 
    SelectedItem="{Binding WarehouseList.CurrentItem}" />