0

「アプリケーション」オブジェクトを含むリストボックスがあります。「アプリケーション」オブジェクトは、開始または停止できます。

リストボックスの各要素に対して、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();
  }
}
4

1 に答える 1

0

このように参照されるコンバーターは見たことがありません。それらをどこかに作成してから、StaticResource/を使用して参照する必要がありDynamicResourceます。

<Window.Resources>
  <Converters:InvertedBoolToVisibilityConverter x:Key="invBoolConv"/>
</Window.Resources>

<Button Margin="5,0" Content = "Start" 
        Command="{Binding StartCommand}"
        Visibility="{Binding IsRunning, Converter={StaticResource invBoolConv}"/>
于 2013-09-27T14:34:44.987 に答える