0

我有一个包含一些“应用程序”对象的列表框。可以启动或停止“应用程序”对象。

对于我的列表框中的每个元素,我有 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 回答