簡體   English   中英

根據選擇禁用/啟用組合框項目

[英]Disable/Enable ComboBox-Items depending on selection

我有以下ViewModel:

 private MovementType selectedMovementType = MovementType.Continous;
 private bool isMovementSelectable;
 private readonly DeviceSelection DeviceSelection;

 public AxisActionsViewModel(...)
 {
     ....
     this.isMovementSelectable = false;
     this.DeviceSelection.Devices.CollectionChanged
        += this.Devices_CollectionChanged;
     ....
 }


  public bool IsMovementSelectable
  {
     get => this.isMovementSelectable;

     set
     {
        this.isMovementSelectable = value;
        this.OnPropertyChanged();
     }
  }

  private void Devices_CollectionChanged(
     object sender,
     System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
  {

      if (this.transportDeviceSelection.TransportDevices.Any(item => item.Name.ToLower().Contains("a"))
        || this.transportDeviceSelection.TransportDevices.Any(item => item.Name.ToLower().Contains("b")))
     {
        this.IsMovementSelectable = false;
     }
     else
     {
        this.IsMovementSelectable = true;
     }
  }

  public IEnumerable<MovementType> MovementTypes
  {
     get
     {
        yield return MovementType.Continous;
        yield return MovementType.Relative;
        yield return MovementType.Absolute;
     }
  }

  public MovementType SelectedMovementType
  {
     get => this.selectedMovementType;

     set
     {
        if (this.selectedMovementType != value)
        {
           this.selectedMovementType = value;

           this.OnPropertyChanged(() => this.SelectedMovementType);

           this.UpdateMovementTemplate();
        }
     }
  }

在視圖中綁定到ViewModel的IsMovementSelectable屬性

 <UIComboBox Grid.Row="0" Grid.Column="6" Grid.ColumnSpan="6"
                    ItemsSource="{Binding MovementTypes}"
                    SelectedItem="{Binding SelectedMovementType}">

           <UIComboBox.ItemContainerStyle>
              <Style TargetType="UIComboBoxItem">
                 <Setter Property="IsEnabled"
                         Value="{Binding IsMovementSelectable}"/>
              </Style>
           </UIComboBox.ItemContainerStyle>

我的問題是,現在如何正確實現此功能? 我希望選擇A或B時,組合框僅由特定項目組成。 我在哪里放置IsMovementSelectable屬性以獲取所需的行為? 我嘗試了不同的方法,但沒有一個能帶來積極的結果。

正如Mike所評論的,最好的辦法是只過濾ComboBox中的內容, 在這里查看 CollectionView可以輕松完成您需要做的事情,只需創建一個並將您的ItemsSource綁定到它即可。

通過使用Visibility屬性,您可能能夠維持當前的方法,並使用技巧來獲得所需的行為:

<Setter Property="Visibility" Value="{Binding IsMovementSelectable, Converter={StaticResource BoolToVisibilityConverter}}"/>

您將需要創建一個BoolToVisibilityConverter轉換器,就像這樣 這未經測試,也不知道可能會得到什么結果,但是如果您不希望或者無法正確地重新編寫代碼,則可以解決問題。 如果幸運的話,它會折疊不應顯示的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM