我在使用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);
由于类型同时属于Content
和ContentType
,失败了 - 有没有办法解决这个问题?我得到的错误是:
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'];
?
答案 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);