【问题标题】:Element Data-Binding in SilverlightSilverlight 中的元素数据绑定
【发布时间】:2010-10-25 06:24:10
【问题描述】:

我在 DataGrid 中有一个模板列:

 <sdk:DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal" VerticalAlignment="Center" >

                                    <TextBlock Text="{Binding Name,ElementName=rsAllSkills}"/>
                                </StackPanel>
                            </DataTemplate>
 </sdk:DataGridTemplateColumn.CellEditingTemplate>

在同一个 xaml 文件中,我有

<riaControls:DomainDataSource QueryName="GetSkillsQuery" AutoLoad="True" x:Name="rsAllSkills">
            <riaControls:DomainDataSource.DomainContext>
                <domain:XXXX context/>
            </riaControls:DomainDataSource.DomainContext>
</riaControls:DomainDataSource>

DataSource 肯定已经成功加载了所有内容,如果我将 TextBlock 放在 DataGrid 之外,它就可以工作;但在 DataGrid 中,它甚至不加载 rsAllSkills 的名称....

谁能给个提示,非常感谢。

【问题讨论】:

  • rsAllskills 不是模板列范围内的名称。范围不会超出DataTemplate。您可能需要在某处的 DataGrid 的 DataContext 中包含 DomainContext。

标签: silverlight data-binding element


【解决方案1】:

有一个虚拟转换器并检查绑定。

我的猜测是,CellEditingTemplate 中的DataTemplate 会接收到父级的DataContext,即DataGrid 的DataContext。因此,要解决此问题,您可以做一件事。

1) 将rsAllSkills 绑定到DataGridTemplateColumn 的Tag 属性。
2) 现在,将 TextBlock 的 Text 属性与 Tag 属性绑定,例如,

<sdk:DataGridTemplateColumn Tag="{Binding Name,ElementName=rsAllSkills}">
    <sdk:DataGridTemplateColumn.CellEditingTemplate>
         <DataTemplate>
              <StackPanel Orientation="Horizontal" VerticalAlignment="Center" >    
                  <TextBlock Text="{Binding Tag}"/>
              </StackPanel>         
         </DataTemplate>
    </sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>

【讨论】:

  • 我通过将 Ria 数据源控件定义为静态资源解决了这个问题......但如果它有效,我会给你的解决方案一个机会并标记为解决方案。谢谢!
  • @user299230 我想,静态资源是最好的方法。 :)
猜你喜欢
  • 2011-07-14
  • 2011-04-26
  • 2011-01-27
  • 2011-01-25
  • 2011-01-30
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2013-07-03
相关资源
最近更新 更多