WPF アプリケーションには、WrapPanel を使用して ItemsControl コンテナーを介してボタンとして表示している文字列のコレクションを公開している ViewModel があります。ただし、ViewModel の RelayCommand をボタンにバインドできませんでした。
ViewModel (IncidentAddressesViewModel):
public IEnumerable<string> Addresses { get; set; }
public RelayCommand<string> ZoomToAddressCommand { get {
if (this.zoomToAddressCommand == null) this.zoomToAddressComamnd = new RelayCommand<string>(this.ZoomToAddress);
return this.zoomToAddressCommand;
}}
private void ZoomToAddress(string address) { MessageBox.Show (address); }
XAML:
<TabItem x:Name="IncidentAddressesTab">
<ItemsControl ItemsSource="{Binding Addresses}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Command">
<cmd:EventToCommand
Command="{Binding ZoomToAddressCommand}"
CommandParameter="{Binding Text}"
PassEventArgsToCommand="True"
/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</TabItem>
DataContext を接続する Xaml コード ビハインド
IncidentAddressesTab.DataContext = new IncidentAddressesViewModel();
ボタンはアドレスとともに表示されています。ZoomToAddressCommand にブレークポイントを設定すると、1 回ヒットしますが、ボタンをクリックすると、ZoomToAddress メソッドが呼び出されません。
バインディングの詳細を含めるように更新: 実際に TabItem にバインドしています。XAML を更新して追加のタグを含め、XAML コード ビハインドにバインド コードを追加しました。これが適切な情報だとは知りませんでした。さもなければ、最初に追加していただろう.. (: