2011-02-26 11 views
1

私はリストビューコントロールにボタンを持っています。このコントロールは、ViewModelクラスの基本クラスのコマンドの1つにバインドされています。リストビューの外にボタンを置くと、同じコマンドでうまく動作します。しかし、私がlistviewに置いたときにコマンドは起動されません。ListViewのボタン - MVVMを使用

あなたは理由を考えることができますか? - それは、リスト内の現在のアイテムののDataContextを取得し、そのためには、元のDataContextを失うあなたはリストビュー内のボタンを配置すると

<ListView Grid.Row="2" AlternationCount="2" ItemsSource="{Binding Path=AObject}" Margin="20" MaxHeight="200"> 
      <ListView.DataContext> 
       <local:MyViewModel/> 
      </ListView.DataContext> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Run ID" DisplayMemberBinding="{Binding Path=RID}" /> 
        <GridViewColumn Header="Job ID" DisplayMemberBinding="{Binding Path=JID}" /> 
        <GridViewColumn Header="Run Description"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <ContentPresenter Content="{Binding Path=OpenScCommand}" HorizontalAlignment="Right"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Edit"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Button Command="{Binding ShowItemCommand}" CommandParameter="{Binding Path=RID}" Content="_Edit email run" IsDefault="False"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
     </ListView> 

答えて

3

を使用しています。ここでは、ListView自体ののDataContextにバインドすることができます方法は次のとおりです。

側の注意点として
<Button Command="{Binding ShowItemCommand}" DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}}" ... 

:コマンドが何をするかに応じて、ViewModelにに入れた方が良いかもしれない項目の

+0

アイテムのビューモデルでは?!項目はロジックではなく* data *を表します。コマンドを置く間違ったimhoがあります。 –

+0

ありがとうございました。私はそうだと思いました。私はViewModellocatorアプローチを実装することができましたが、これはもっと速くなっています。 – user635097

0

は、それが新しいのDataContextを取得します。以下は

はスニペットです。これに

最善の解決策は、ボタンがListViewItemであるので、それはそれが含まれている項目のDataContextのを継承するためですViewModelLocator

0

あなたはもう少し少ないコードでこれを行うことができます..

<Button Command="{Binding ShowItemCommand}"> 
    <Button.DataContext> 
     <local:MyViewModel/> 
    </Button.DataContext> 
</Button> 
関連する問題