WPF DataGrid получает элемент строки

#c# #.net #wpf #datagrid

#c# #.net #wpf #datagrid

Вопрос:

я новичок в wpf, у меня есть datagrid следующим образом,

         <DataGrid Grid.Row="0" x:Name="dg1" Grid.Column="0" SelectionChanged="DataGrid_SelectionChanged" ItemsSource="{Binding Path=Articles}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                 <DataGridTextColumn Header="Description" Binding="{Binding Path=Description}" />
            </DataGrid.Columns>
        </DataGrid>
  

ViewModel имеет свойство

 public IEnumerable<Article> Articles
{
    get
    {
       return _ArticleList;
    }
}
  

Я не могу получить выбранный элемент, следующий код возвращает ошибку.
Невозможно привести объект типа ‘MS.Internal.NamedObject’ для ввода ‘Article’.

 private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
     Article Article = (Article)this.dg1.SelectedItems;
}
  

Пожалуйста, есть предложения, как реализовать то же самое??

Ответ №1:

Редактировать:

DataGrid.SelectedItems — это IList. если вам нужен только выбранный элемент, используйте DataGrid.SelectedItem <— без s 🙂

если вы хотите установить выбранный элемент с помощью привязки:

 public Article SelectedArticle
{
    set
    {
       this._selectedArticle= value;
       OnPropertyChanged("SelectedArticle");
    }
    get
    {
       return _selectedArticle;
    }
}
  

XAml

 <DataGrid SelectedItem="{Binding SelectedArticle, Mode=OneWayToSource}" />
  

или как CommandParameter для кнопки с ICommand

 <Button Command="{Binding EditDataCommand}" CommandParameter="{Binding ElementName=MyGridCtrl, Path=MyDataGrid.SelectedItem}"/>
  

или все выбранные элементы для кнопки с ICommand

 <Button Command="{Binding DeleteDataCommand}" CommandParameter="{Binding ElementName=MyGridCtrl, Path=MyDataGrid.SelectedItems}" >
  

Комментарии:

1. Вы не указываете, что MyGridCtl такое.

Ответ №2:

Вам нужно проверить, выбраны ли элементы:

 private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
     if(this.dg1.SelectedItems.Count > 0){
         Article article = (Article)this.dg1.SelectedItems;
     }
}
  

Комментарии:

1. ошибка не из-за переменной, это ошибка ввода, в коде я использую __article

Ответ №3:

Надеюсь, это сработает…

Article _article = ((dgReferences.Выбранный элемент как DataGridRow).Элемент как статья);

С уважением, Арундхадж