У меня проблема с состоянием элемента menu в ContextMenu. У меня есть ObversableCollection of Cars. Автомобили визуализируются в ListBox, для каждого элемента ListBox я хочу ContextMenu. В этом ContextMenu есть опция ReserveCar.ContextMenu CanExecute не обновляется
У меня проблема в том, что CanExecute
Car
выполнен только один раз, когда я нажимаю правой кнопкой мыши любой автомобиль. Они CanExecute
больше не будут вызываться после этого, когда я нажимаю правой кнопкой мыши другой Car
.
Это приводит к тому, что когда я щелкните правой кнопкой мыши на Car
, который может быть зарезервирован, то MenuItem
активен, но когда я затем щелкните правой кнопкой мыши другой, который я не должен быть в состоянии резервируем MenuItem
остается активным (потому что CanExecute
не вызывается снова).
<ListBox
ItemsSource="{Binding Cars}"
SelectedItem="{Binding SelectedCar}">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Reserve Car"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=ContextMenu}, Path=PlacementTarget.SelectedItem}"
Command="{Binding ReserveCarCommand}">
<MenuItem.Icon>
<Image Source="{StaticResource ReserveCarIcon}" Width="24" Height="24"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>
Мой ViewModel:
private RelayCommand<Car> _reserveCarCommand;
public ICommand ReserveCarCommand
{
get { return _reserveCarCommand ?? (_reserveCarCommand = new RelayCommanReserveCar, CanReserveCar)); }
}
public bool CanReserveCar(Car car)
{
return !car.IsReserved && ReservationsAreOpen;
}
public void ReserveCar(Car car)
{
car.IsReserved = true;
}
Кроме того, когда я вручную обновить команду, делая что-то, CanExecute
вызывается с null
в качестве параметра, так что это еще не работает, либо.
if (_reserveCarCommand != null) _reserveCarCommand .RaiseCanExecuteChanged();