2

私は Listbox を使用しており、ボタンが含まれています。コマンドを使用してボタンクリックイベントを処理したいのですが、コマンドが呼び出されません。

これは正しい方法ですか??

  <pmControls:pmListBox Grid.Row="1" Margin="3" ItemsSource="{Binding Countries}" SelectedItem="{Binding SelectedCountry}" >
                <pmControls:pmListBox.ItemTemplate >
                    <DataTemplate >
                        <Button Command="{Binding GetAllStatesCommand}"   CommandParameter="{Binding}" Margin="3" Width="100" Height="50" Content="{Binding Title}">                                                                                                                                
                        </Button>

                    </DataTemplate>
                </pmControls:pmListBox.ItemTemplate>
  </pmControls:pmListBox>
4

1 に答える 1

0

1つのリスト項目のは、周囲のコントロールののとDataContextは異なります。DataContextそのコマンドをDataContextそのコントロールのにバインドするには、次の2つのオプションがあります。

コントロールに名前とその参照を指定します。

<pmControls:pmListBox x:Name="myCoolListBox" [...]>
    <pmControls:pmListBox.ItemTemplate>
        <DataTemplate>
            <Button Command="{Binding DataContext.GetAllStatesCommand, ElementName=myCoolListBox}" CommandParameter="{Binding}" [...] />                                           
        </DataTemplate>
    </pmControls:pmListBox.ItemTemplate>
</pmControls:pmListBox>

DataContextまたは、 ...を保持するクラスを作成します。

public class DataContextBinder : DependencyObject
{
    public static readonly DependencyProperty ContextProperty = DependencyProperty.Register("Context", typeof(object), typeof(DataContextBinder), new PropertyMetadata(null));
    public object Context
    {
        get { return GetValue(ContextProperty); }
        set { SetValue(ContextProperty, value); }
    }
}

ListBox...そしてあなたの:のリソースセクションにそのインスタンスを作成します

<pmControls:pmListBox x:Name="myCoolListBox" [...]>
    <pmControls:pmListBox.Resources>
        <local:DataContextBinder x:Key="dataContextBinder" Context="{Binding}" />
    </pmControls:pmListBox.Resources>
    <pmControls:pmListBox.ItemTemplate>
        <DataTemplate>
            <Button Command="{Binding Context.GetAllStatesCommand, Source={StaticResource dataContextBinder}" CommandParameter="{Binding}" [...] />                                           
        </DataTemplate>
    </pmControls:pmListBox.ItemTemplate>
</pmControls:pmListBox>
于 2012-11-08T12:54:19.597 に答える