、などの名前DrawMoneyFromChannel1
の8 つのボタンがあります。DrawMoneyFromChannel2
DrawMoneyFromChannel3
List<DeviceChannels>
各チャネルに金額を含む があります。
それぞれのチャンネルの金額がゼロの場合、そのチャンネルのボタンを有効にしないでください。
この状況でバインディングを編成する最良の方法は何ですか?
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
して持っています。が実装されているため、がゼロの場合はfalseになります。Amount
Name
Draw
ICommand
ICommand
CanExecute
Amount