Как получить SelectedItems из DataGrid, используя MVVM - PullRequest
1 голос
/ 13 февраля 2012

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

Как мне найти определенный номер строки DataItem, выбранный в этой коллекции Когда CheckBox отмечен на сетке.

Здесь Мой код для создания CheckBox в Grid:

<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));
          }
      }

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

Заранее спасибо.

1 Ответ

0 голосов
/ 04 мая 2012

Я бы порекомендовал использовать подход MVVM и использовать Binding для получения выбранных элементов. К сожалению, 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...