【问题标题】:WPF DataGrid Get Row ItemWPF DataGrid 获取行项目
【发布时间】:2011-04-26 09:02:21
【问题描述】:

我是 wpf 的新手,我有如下数据网格,

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

请有什么建议如何实施?

【问题讨论】:

    标签: c# .net wpf datagrid


    【解决方案1】:

    编辑:

    DataGrid.SelectedItems 是一个 IList。如果您只想要 Selected One,请使用 DataGrid.SelectedItem

    如果你想通过 Binding 设置 SelectedItem:

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

    XAml

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

    或作为带有 ICommand 的按钮的 CommandParameter

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

    或所有带有 ICommand 的按钮的 SelectedItems

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

    【讨论】:

    • 你没有指定MyGridCtl是什么。
    【解决方案2】:

    您需要检查项目是否被选中:

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

    【讨论】:

    • 错误不是因为变量,是打字错误,在代码中我使用__article
    【解决方案3】:

    希望这行得通...

    文章_article = ((dgReferences.SelectedItem 为 DataGridRow).Item as Article);

    问候 阿伦达杰

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2011-04-24
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多