[英]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.