#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).Элемент как статья);
С уважением, Арундхадж