Получить значение из ячейки DataGrid

401
15 июня 2017, 03:52

Есть dataGrid. При щелчке по строке этого грида в метод передается значение ячейки этой строки. Xaml грида :

      <DataGrid x:Name="DGInvestment" ItemsSource="{Binding InvestCollection}" AutoGenerateColumns="False">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonUp">
                    <i:InvokeCommandAction Command="{Binding SelectDetails}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
                <DataGrid.Columns>
                  <DataGridTextColumn Header="Column1" MinWidth="200" Width="*" Binding="{Binding Type}"/>
                  <DataGridTextColumn Header="Column2" MinWidth="200" Width="*" Binding="{Binding Date}"/>
               </DataGrid.Columns>
        </DataGrid>

Коллекция из вьюмодели :

    public ObservableCollection<Invest> InvestCollection { get; set; }
    public class Invest
    {
        public string Type { get; set; }
        public string Date { get; set; }
    }

Заполняется в конструкторе :

        InvestCollection = new ObservableCollection<Invest>();
        InvestCollection.Add(new Invest() { Type = " type" });
        InvestCollection.Add(new Invest() { Date= " date" });

И метод в самой вьюшке который должен принимать значение из ячейки грида :

    public ICommand SelectDetails
    {
        get
        {
            return new RelayCommand(delegate() 
            {
            //..........
            });
        }
    }

Собственно вопрос - как в SelectDetails получить значение определенного столбца той строки, на которую нажал пользователь ? Использую Mvvm Light

Answer 1
  1. В ViewModel определяем:

    private Invest selectedInvest = new Invest();
    public Invest SelectedInvest
    {
    get{
        return selectedInvest;
    }   
    set{
       if (selectedInvest == value) return;
       selectedInvest = value;
       RaisePropertyChanged("SelectedInvest");
       // сюда можно добавить что должно выполняться когда выбранный элемент 
      // изменится
      }
    }
    

    `

  2. Как уже советовал user2455111 используйте SelectedItem:

     <DataGrid x:Name="DGInvestment" ItemsSource="{Binding InvestCollection}" SelectedItem="{Binding SelectedInvest, Mode=TwoWay}"
    

P.S: ICommand SelectDetails должна быть определена в ViewModel, а не в View. Иначе не выйдет присоединить команду к View. Вы используете Binding. Binding ищет указанную команду в DataContext, а это ViewModel.

READ ALSO
Событие клика на скроллах панели

Событие клика на скроллах панели

У меня есть панель с элементами внутри нее, у панели есть скроллинг по горизонтали и вертикалиСобытие OnScroll панели происходит, если кликнуть...

212
Bootstrap multi select buttons

Bootstrap multi select buttons

Всем приветРаньше я использовал стандартные checkbox теперь я хочу начать использовать Bootstrap multi select

419
c#. Взаимодействие с Exchange Server

c#. Взаимодействие с Exchange Server

Необходимо написать небольшое приложение, которое работает с почтовыми ящиками в Exchange Server - Создает/изменяет записи в календаре, синхронизирует...

310