2012-02-10 9 views
0

WPFアプリケーションフォームTelerik GridviewでC#を使用しています。グリッドでGridView行が選択または影響を受ける場合チェックボックスがオンになっていない

グリッドビューでは、のデータテンプレートを使用してチェックボックスを挿入しました。

これをクリックするかチェックボックスをオンにすると、が作成されますが、現在の行が選択されていません。

どうすればこの問題を解決できますか?

この問題の解決方法を教えてください。

グリッド内のチェックボックスを作成するための私のXAMLコードは次のとおりです。私は、クリックイベントを作成していることをチェックボックスで

<telerik:GridViewDataColumn.CellTemplate> 
<DataTemplate> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <CheckBox Name="CheckBox" IsChecked="{Binding IsSelected,UpdateSourceTrigger=PropertyChanged}" Click="CheckBox_Click" /> 
    </StackPanel> 
</DataTemplate> 
</telerik:GridViewDataColumn.CellTemplate> 

また、は、チェックボックスのクリックイベントであるのグリッドビューのCheckBox Placed行の現在の行番号を知りたいと思っています。これについていくつか提案してください。

ここで私のチェックボックスをクリックしてイベントコード:事前に

private void CheckBox_Click(object sender, RoutedEventArgs e) 
{ 
    CheckBox selectedCheckbox = (CheckBox)sender; 
    //this.selectedCasePackRadGrid -- This is my gridview 
    // Here I want to get the selected row number 
} 

感謝。

+1

実際に現在の行が選択されていません。 – Zenexer

+0

CheckBoxのクリックイベントでグリッドビューの現在の行を取得できません。あなたは私にこれを達成する方法を教えてもらえますか? – SuryaKavitha

+0

私はこのカスタムコントロールの仕組みが完全にはわかりませんが、あるレベルで 'Parent'プロパティを使ってアクセスできると仮定しています。 – Zenexer

答えて

1

まず、実際に行をSelectedと設定していません。

あなたのバインディングは現在、IsSelectedというDataContextのプロパティを設定しています。このプロパティが実際に存在する場合、あなたはそれがあなたのデータオブジェクトに存在しない場合、あなたはGridViewRowを見つけて、それがIsSelected財産だと結合する結合RelativeSourceを使用する必要があるスタイル

<Style TargetType="{x:Type telerik:GridViewRow}"> 
    <Setter Property="IsSelected" Value="{Binding IsSelected}" /> 
</Style> 

GridViewRow.IsSelectedにバインドすることができます

Checked="{Binding RelativeSource={RelativeSource AncestorType={x:Type telerik:GridViewRow}}, Path=IsSelected}" 

は、行番号を見つけるためとして、私はあなたが行番号を見つけるために使用できることを知って何RowIndexプロパティはありません。一つの選択肢は、GridViewのItemsSourceを取得し、IndexOf(dataobject)を呼び出すことで、しかし、そのような行数よりも高いものにAlternationCountを設定し、GridViewRow.AlternationIndexへのアクセスなど、他の選択肢もありますMVVM層の分離

private void CheckBox_Click(object sender, RoutedEventArgs e) 
{ 
    CheckBox checkBox = (CheckBox)sender; 
    var dataItem = checkBox.DataContext as MyDataItem; 
    var parentDataObject = myGridView.ItemsSource as SomeDataObject; 

    if (dataItem == null || parentDataObject == null) 
     return; 

    var index = parentDataObject.SomeCollection.IndexOf(dataItem); 
    // Do something with index 
} 

を破るない点あなたが実際にインデックスを必要とするものを評価し、あなたが望むものを達成するために他の方法を使うことができるかどうかを見てください。 。たとえば、選択した行のインデックスをボタンコマンドに渡す場合は、SelectedItemをCommandParameterとして渡すほうがよいでしょう。

+0

レイチェル、そのGreat.Nowあなたのコードを使用してチェックボックスをオンにすると、私のグリッドビューの行が選択されています。私の仕事をするのにとても便利です。ありがとうございました。 :-)あなたはとても素晴らしいです:-) – SuryaKavitha

関連する問題