2012-02-13 2 views
1

Я создаю приложение WPF с использованием C#, а также я использовал MVVM-архитектуру в моем приложении. Я создал столбец CheckBox в сетке сетки telerik с помощью DataTemplate. Я использую коллекцию для привязки данных в GridView.Как получить SelectedItems из DataGrid с помощью MVVM

Как я могу найти номер конкретной строки DataItem был выбран в этой коллекции Когда CheckBox установлен на Grid.

Вот мой код для создания CheckBox на сетке:

<telerik:GridViewDataColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> 
           <CheckBox Name="StockCheckBox" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type telerik:GridViewRow}}, Path=IsSelected}" /> 
          </StackPanel> 
         </DataTemplate> 
        </telerik:GridViewDataColumn.CellTemplate> 

И Моя Коллекция,

foreach (var AvailableStock in AvailableStocks)// In this **AvailableStocks**(IEnumurable Collection) I got all the datas in the Gridview 
     //In this collection How can i know that the particular RowItem is selected in that gridview by CheckBox 
     { 
      if (SelectedStock != null) 
      { 
      this.SelectedStocks.Add(AvailableStock); 

      this.RaisePropertyChanged(Member.Of(() => AvailableStocks)); 
      } 
     } 

Любой Пожалуйста скажите мне некоторые предложения по этому вопросу Как я могу добиться этого? Как я могу определить, что определенная строка была выбрана?

Спасибо заранее.

+0

вам нужен ответ на все 3 вопроса или ...? 'Как получить SelectedItems из DataGrid с помощью MVVM'' Как я могу найти, какой конкретный номер строки DataItem был выбран в этой коллекции, когда CheckBox отмечен на Grid. '' Как я могу определить, что определенная строка была выбрана? ' –

+0

jberger, Да, мне это нужно. – SuryaKavitha

+1

Вам нужно знать номер строки, или вам просто нужно знать, какой объект в коллекции, к которой привязана строка? –

ответ

0

Я бы рекомендовал использовать подход MVVM и использовать привязку для получения выбранных элементов. К сожалению, DataGrid не предоставляет DependencyProperty для выбранных элементов, но вы можете предоставить свои собственные. Выведите класс из DataGrid, зарегистрируйте свойство зависимостей для SelectedItems и переопределите событие SelectionChanged, чтобы обновить свойство зависимостей. Затем вы можете использовать привязку, чтобы сообщить свой ViewModel о выбранных элементах.

Код:

public class CustomDataGrid : DataGrid 
{ 
    public static readonly DependencyProperty CustomSelectedItemsProperty = DependencyProperty.Register(
     "CustomSelectedItems", typeof (List<object>), typeof (CustomDataGrid), 
     new PropertyMetadata(new List<object>())); 

    public List<object> CustomSelectedItems 
    { 
     get { return (List<object>) GetValue(CustomSelectedItemsProperty); } 
     set { SetValue(CustomSelectedItemsProperty, value);} 
    } 

    protected override void OnSelectionChanged(SelectionChangedEventArgs e) 
    { 
     foreach(var item in e.AddedItems) 
      CustomSelectedItems.Add(item); 
     foreach (var item in e.RemovedItems) 
      CustomSelectedItems.Remove(item); 
     base.OnSelectionChanged(e); 
    } 
} 

XAML:

<Grid> 
    <Ctrl:CustomDataGrid CustomSelectedItems="{Binding MySelectedItems}"/> 
</Grid> 
Смежные вопросы