有8个按钮名为DrawMoneyFromChannel1
,DrawMoneyFromChannel2
,DrawMoneyFromChannel3
等等。
有一个List<DeviceChannels>
,其中包含每个频道的金额。
分别对它的频道按钮不启用。
在这种情况下组织绑定的最佳方法是什么?
答案 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>
在此示例中,Channels
是ChannelViewModel
个对象的集合。 ChannelViewModel
类实现INotifyPropertyChanged
并具有属性Amount
,属性Name
和属性Draw
,即ICommand
。 ICommand
已实施,因此当CanExecute
为零时,Amount
为false。