0
禁用/啓用組合框項我有以下視圖模型:取決於選擇
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();
}
}
}
,並在視圖中的視圖模型
<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>
我的問題的IsMovementSelectable屬性綁定現在,如何我是否正確實現了此功能? 我希望當選擇A或B時,ComboBox僅包含特定項目。 我在哪裏放置IsMovementSelectable屬性以獲得想要的行爲? 我嘗試了不同的方法,但沒有導致積極的結果。
最簡單的方法是使用一個集合來過濾視圖組合的項目源,則這將它們傳遞到組合 – MikeT
我覺得之前刪除任何無效的值,你的觀念就錯了。你比較string.tolowercase和一些像'A'這樣的大寫字母。 2.foreach設備打開和關閉相同的值,因此IsMovementSelectable僅取決於最後一個設備。 3.你在DataContext中的每個ComboboxItem中查找IsMovementSelectable,這意味着,因爲這些項的dataContext只是枚舉值,setter將不起作用。所以,如果你想禁用所有項目,只需使用relativeSource。如果你想啓用/禁用不同的項目,你需要重新設計一些東西:你需要一些具有Value和bool屬性的dataModel。當然,在我的代碼的 – sTrenat
我張貼之前,編輯代碼,並去掉了一些不必要的部分......我只用小寫在載有()...我已經作出關於你的#2檢查與。任何列表中的一些變化。 ..for#3我認爲你是對的... – SMa