2011-04-26 78 views
0

我新的WPF,我有数据网格如下,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> 

视图模型具有财产

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

我没能获得所选择的项目,下面的代码返回错误。 无法投射“MS.Internal.NamedObject”类型的对象来键入“文章”。

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

请给出任何建议如何实现相同?

回答

1

编辑:

DataGrid.SelectedItems是一个IList。如果你想只是选择了一个使用DataGrid.SelectedItem < - 没有小号:)

如果你想通过绑定设置的SelectedItem

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}"/> 

或所有SelectedItems对于对接与ICommand的

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

你不指定'MyGridCtl'是什么。 – Philip 2013-02-20 22:07:40

1

你需要的,如果选择检查项目:

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

错误不是因为变量,它的打字错误,在代码中我使用__article – 2011-04-26 09:07:54

+0

@Milan阿迪亚我已经编辑了答案。试试看。 – Vale 2011-04-26 09:11:58

0

希望这个作品......

文章_Article = ((dgReferences.SelectedItem为 DataGridRow).Item的条款);

问候 ArunDhaJ