2014-07-25 38 views
1

好吧......这是星期五,天色已晚,我有点文思贝力得...无法从DataGrid的问题投.SelectedItems

代码:

public partial class SiteSelection : Window 
{ 

    private IList<IISBrowser.IISSiteList> _siteList; 

    public IList<IISBrowser.IISSiteList> SelectedItemsList { get; set; } 

    public SiteSelection(IList<IISBrowser.IISSiteList> _sl) 
    { 
     InitializeComponent(); 
     _siteList = _sl; 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     this.dg_Sites.ItemsSource = _siteList; 
    } 

    private void btnSelectSites_Click(object sender, RoutedEventArgs e) 
    { 
     SelectedItemsList = (IList<IISBrowser.IISSiteList>)dg_Sites.SelectedItems; 
     this.Close(); 
    } 

填充一个DataGrid,其中我可以选择项目。随着一个按钮(btnSelectSites)

我不断收到Unable to cast object of type 'System.Windows.Controls.SelectedItemCollection' to type 'System.Collections.Generic.IList 1[Backup.S3.Store.IISBrowser+IISSiteList]'.

,不明白为什么......这是我的理解是,因为我申请到的ItemSource设置此IList<>,我将返回相同数据类型..

我该如何解决这个问题?

编辑:

已经尝试过这里的解决方案:Type list of selected items in a wpf datagrid它类似于其他的解决方案就在这里......其中没有工作。

+0

但是,我确实尝试过这个问题的解决方案,并且它的答案让我没有 - 在哪里。 – Kevin

+0

我刚刚开了V.S.自己测试一下。链接答案的最后一个选项应该适合你。这是@GrantWinney在他的回答中所做的,我可以证实它为我工作。 –

回答

6

使用此相反,铸造收集原始类型:

SelectedItemsList = dg_Sites.SelectedItems 
          .Cast<IISBrowser.IISSiteList>() 
          .ToList(); 

在链接的答案,list将(在你的情况下)dg_Sites.SelectedItems集合。

如果还没有,您可能还需要将using System.Linq;添加到班级的顶部。

+1

'(IList )'虽然是多余的... – McGarnagle

+0

'错误\t 1'System.Collections.IList'不包含'Cast'的定义,并且没有扩展方法'Cast'接受第一个参数可以找到类型'System.Collections.IList'(你是否缺少使用指令或程序集引用?)' – Kevin

+0

我是一个工具。我需要添加'使用System.Linq;' – Kevin