「アプリケーション」オブジェクトを含むリストボックスがあります。「アプリケーション」オブジェクトは、開始または停止できます。
リストボックスの各要素に対して、2 つのボタンがあります。1 つ目はアプリケーションを開始し、2 つ目はアプリケーションを停止します。
しかし、[開始] ボタンをクリックすると、バインド "IsRunning" が正しく更新されません。「CommandManager.InvalidateRequerySuggested();」にもかかわらず、アプリケーション内をクリックすると、コマンドの CanExecute が再評価されます。
そのため、開始ボタンは有効のままで、停止ボタンは表示されません。
<ListBox Grid.Row="1" ItemsSource="{Binding Applications}" Grid.ColumnSpan="3" BorderThickness="0" Background="#FFE8E8E8" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Margin="5,0" Content = "Start"
Command="{Binding StartCommand}"
Visibility="{Binding IsRunning, Converter={Converters:InvertedBoolToVisibilityConverter}}"/>
<Button Margin="5,0" Content = "Stop"
Command="{Binding StopCommand}"
Visibility="{Binding IsRunning, Converter={Converters:BoolToVisibilityConverter}}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
ApplicationViewModel で:
public bool IsRunning
{
get
{
return this.m_IsRunning;
}
set
{
this.m_IsRunning = value;
this.OnPropertyChanged("IsRunning");
CommandManager.InvalidateRequerySuggested();
}
}