DataGrid中的多个Cast

时间:2011-03-08 17:11:42

标签: c# wpf

我在使用cast和datagrids时遇到了一些问题。我有一个LINQ to SQL查询:

var contents = from content in context.Contents
               join contenttype in context.ContentTypes on content.ContentTypeID equals contenttype.ContentTypeID
               select new { content, contenttype };

然后将其放入datagrid(不是所有数据,只选择content.ContentID等列。)

问题在于,当我尝试获取所选行时,我不能。我有以下代码:

Console.WriteLine((Content)dataGrid1.SelectedItem);
由于类型同时属于ContentContentType

失败了 - 有没有办法解决这个问题?我得到的错误是:

Unable to cast object of type '<>f__AnonymousType0`2[iAdvert_Desktop.Content,iAdvert_Desktop.ContentType]' to type 'iAdvert_Desktop.Content'.

如果我只是编写SelectedItem,我会得到:{ content = iAdvert_Desktop.Content, contenttype = iAdvert_Desktop.ContentType } - 有没有办法可以做到:(Content)dataGrid1.SelectedItem['Content'];

3 个答案:

答案 0 :(得分:1)

在WPF中,您永远不需要使用SelectedItem。你最好重新设计它,这样你就可以使用集合视图了。

答案 1 :(得分:1)

我认为这篇文章可能会回答你的问题: How do I get values from SelectedItem in ComboBox with Linq and C# 3.5

答案 2 :(得分:1)

SelectedItem不是“Content和ContentType”,它是一种匿名类型,具有名为Content和ContentType的属性。

为什么不调整一个有你喜欢的两个属性的poco类并返回其中一个呢?

public class YourPocoClass
{
   public whateverContentIs Content { get; set; }
   public whateverContentTypeIs ContentType { get; set; }
}

var contents = from content in context.Contents
               join contenttype in context.ContentTypes on content.ContentTypeID equals contenttype.ContentTypeID
               select new YourPocoClass() {Content = content, ContentType = contenttype };


Console.WriteLine(((YourPocoClass)dataGrid1.SelectedItem).Content);