如何将一组按钮的IsEnabled绑定到指定的逻辑?

时间:2012-12-04 09:04:11

标签: wpf button binding isenabled

有8个按钮名为DrawMoneyFromChannel1DrawMoneyFromChannel2DrawMoneyFromChannel3等等。

有一个List<DeviceChannels>,其中包含每个频道的金额。

如果相应的频道零金额,

分别对它的频道按钮不启用。

在这种情况下组织绑定的最佳方法是什么?

1 个答案:

答案 0 :(得分:4)

不要在XAML中使用硬编码按钮:

<!-- BAD -->
<StackPanel>
  <Button x:Name="DrawMoneyFromChannel1" Click="??"
      Content="Draw money from channel 1" IsEnabled="??"/>
  <Button x:Name="DrawMoneyFromChannel2" Click="??"
      Content="Draw money from channel 2" IsEnabled="??"/>
  <Button x:Name="DrawMoneyFromChannel3" Click="??"
      Content="Draw money from channel 3" IsEnabled="??"/>
  <Button x:Name="DrawMoneyFromChannel4" Click="??"
      Content="Draw money from channel 4" IsEnabled="??"/>
  <!-- ... -->
</StackPanel>

<!-- BETTER -->
<ItemsControl ItemsSource="{Binding Channels}">
  <ItemsControl.ItemTemplate>
    <Button Command="{Binding Draw}">
      <TextBlock>
        <TextBlock Text="Draw money from "/>
        <TextBlock Text="{Binding Name}"/>
      </TextBlock>
    </Button>
  </ItemsControl.ItemTemplate>
</ItemsControl>

在此示例中,ChannelsChannelViewModel个对象的集合。 ChannelViewModel类实现INotifyPropertyChanged并具有属性Amount,属性Name和属性Draw,即ICommandICommand已实施,因此当CanExecute为零时,Amount为false。