2017-06-08 5 views
0

こんにちは私は、MVVMを介して観測可能なコレクションにバインドされたRadGridViewを持っていて、グリッドのSelectedItemプロパティもモデル内のプロパティにバインドされています。選択したアイテムを開くためにバインドされたボタン列があり、選択したアイテムの詳細を表示します。このコードは以下のとおりです。私はちょうど行最初SelectedItemプロパティが設定されていないにクリックせずに、行のボタンをクリックして、そのコマンドがない場合、私はしかし、その後、ボタンをクリックした行にクリックしたときにTelerik RadGridViewがDataGridのボタンをクリックしたときにアイテムバインディングが機能しない

  <telerik:RadGridView Name="RadGridView" 
         Height="900" 
         AutoGenerateColumns="False" 
         CanUserSortColumns="True" 
         IsReadOnly="True" 
         ItemsSource="{Binding Model.Items}" 
         SelectedItem="{Binding Model.SelectedItem,Mode=TwoWay}" 
         Width="990"> 
      <telerik:RadGridView.Columns> 


       <telerik:GridViewColumn Header="Open Item" > 
        <telerik:GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <Button Content="Open" 
           Command="{Binding Path=DataContext.OpenItemBySelectedItemCommand, 
           RelativeSource= {RelativeSource FindAncestor, 
           AncestorType={x:Type telerik:RadGridView}}}"> 
          </Button> 
         </DataTemplate> 
        </telerik:GridViewColumn.CellTemplate> 
       </telerik:GridViewColumn> 


       <telerik:GridViewDataColumn DataMemberBinding="{Binding DateScanned}" Header="Date Scanned" /> 
       <telerik:GridViewDataColumn DataMemberBinding="{Binding Amount}" Header="Amount" /> 
       <telerik:GridViewDataColumn DataMemberBinding="{Binding Description}" Header="Description" /> 
       <telerik:GridViewDataColumn DataMemberBinding="{Binding IsRefund}" Header="Is Refund" /> 

      </telerik:RadGridView.Columns> 
     </telerik:RadGridView> 

は今、このコードは正常に動作します期待どおり機能しません。

私は行のボタンをクリックすると自動的にその行を選択すると思ったが、明らかにそうではないと思った。誰もボタンをクリックする前に行をクリックすることなく、特定の行のボタンをクリックするだけで、SelectedItemプロパティを設定する方法を知っていますか?

+1

ここをクリックしてください:https://stackoverflow.com/questions/1168976/wpf-datagrid-button-in-a-column-getting-the-row-from-which-it-came-on-the- clx –

+0

そのリンクのMVVMソリューションは、私のコマンドのバインディングを壊しているように見えますが、うまくいきません。ありがとう – philmckendry

答えて

2

は、コマンドにコマンドパラメータとして基本となるデータオブジェクトへの参照を渡すことができます。

<Button Content="Open" 
     Command="{Binding Path=DataContext.OpenItemBySelectedItemCommand, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type telerik:RadGridView}}}" 
     CommandParameter="{Binding}"> 
</Button> 

行は実際にあなたがButtonをクリックしたとき、あなたはいくつかのコードを記述する必要があります選択になるためにそれは実際にそれを選択する。あなたは、このようなButtonClickイベントを処理することによってこれを行うことができます:

private void Button_Click_1(object sender, RoutedEventArgs e) 
{ 
    Button button = sender as Button; 
    RadGridView.SelectedItem = button.DataContext; 
} 

<Button Content="Open" 
     Click="Button_Click_1" 
     Command="{Binding Path=DataContext.OpenItemBySelectedItemCommand, 
     RelativeSource= {RelativeSource FindAncestor, 
     AncestorType={x:Type telerik:RadGridView}}}"> 
</Button> 

ビュー内の行を選択すると、純粋なビューの機能であるので、これは MVVMパターンを破壊しません。

関連する問題