1
對於ContextMenu中的菜單項狀態,我有一個問題。我有一個汽車ObversableCollection。汽車在列表框中可視化,每個列表框項目我想要一個ContextMenu。在該ContextMenu中有一個選項ReserveCar。ContextMenu CanExecute未更新
我遇到的問題是Car
的CanExecute
只有當我右鍵點擊任何汽車時纔會執行一次。他們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>
我的視圖模型:
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();