2010-06-01 49 views
0

我认为最简单的解释方法就是通过示例。Silverlight 4基于从转换器返回的内容进行绑定

我有一个DataGrid与People列表的数据上下文对象:

人民{ 字符串名称; int AstroSignCode; }

我正在使用代码来存储astro标志,因为这些值将被保存在数据库中。我不能只使用占星术对象。

然后,我必须结合到该对象,并使用从基于AstrologySign.ID和People.AstroSignCode之间的交叉参考符号的静态列表返回AstrologySign对象转换器的文本列:

AstrologySign { 字符串名称; DateTime StartDate; DateTime EndDate; int ID; }

所以我的转换器返回一个对象,而不是可显示的东西。

如何将列绑定到从转换器返回的对象的成员?

我的XAML迄今列是这样的:

我认为我可能需要使用DataGridTemplateColumn,但我不知道了。

回答

0

我回答了我自己的问题。花了一些时间才弄明白,因为对我来说,这并不明显。

我确实需要使用DataGridTemplateColumn而不是DataGridTextColumn。

<sdk:DataGridTemplateColumn Header="Astro Sign"> 
       <sdk:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock DataContext="{Binding AstroSign, Converter={StaticResource AstrologySignConverter}}" Text="{Binding Name}"/> 
        </DataTemplate> 
       </sdk:DataGridTemplateColumn.CellTemplate> 
      </sdk:DataGridTemplateColumn> 

这里发生的事情是DataGrid的数据上下文是人的名单。每个人都有一个astrosigncode,它是一个整数。这由AstrologySignConverter映射到包含名称的AstrologySign对象。所以我创建一个数据模板并使用TextBlock控件,并使用转换器将其上下文设置为绑定,然后绑定到转换器返回的对象的元素。

一旦你看到你可以做到这一点很简单。谢谢任何试图解决这个问题的人!