2014-07-21 185 views
0

我有一个问题绑定字段属性的列标题后面的代码。运行应用程序时,标题始终为空字符串。WPF绑定和上下文

<UserControl [...] 
      DataContext="{Binding RelativeSource={RelativeSource Self}}" >  
    <c:DataGrid Name="m_dataGrid" 
       ItemsSource="{Binding Configurations}" > 

     <c:DataGrid.Columns> 
      <!-- Column 'Importieren/Exportieren' --> 
      <c:DataGridTemplateColumn Width="Auto" 
             MinWidth="100"> 
       <c:DataGridTemplateColumn.HeaderTemplate> 
        <DataTemplate> 
         <CheckBox Name="m_checkBoxExportAllDefinitions" 
            Content="{Binding ImportExportColumnHeader, Mode=OneWay}"/> 
        </DataTemplate> 
       </c:DataGridTemplateColumn.HeaderTemplate> 
       <c:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <CheckBox IsChecked="{Binding IsDefinitionExportEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
        </DataTemplate> 
       </c:DataGridTemplateColumn.CellTemplate> 
      </c:DataGridTemplateColumn> 
    </c:DataGrid> 
</UserControl> 

正如你所看到的,UserControlDataContext被设置到自身和数据网格的ItemsSource被设置为配置,它的背后是产权验证码:

public ObservableCollection<ImportExportConfiguration> Configurations { get; private set; } 

当在用于绑定标题文本的属性后面的代码中设置断点(在HeaderTemplate中定义),则不会调用getter:

public string ImportExportColumnHeader { 
    get { 
     return IsImport ? ErgaenzungsfelderResources.ImportExportSelectionControlImportierenColumnHeader : 
     ErgaenzungsfelderResources.ImportExportSelectionControlExportierenColumnHeader; 
    } 
} 

CellTemplate绑定到IsDefinitionExportEnabled的作品。这是ImportExportConfiguration类中包含的一个属性,而ImportExportColumnHeader不是。

我想wpf试图从ImportExportConfiguration得到ImportExportColumnHeader属性,它不存在;这就是为什么它显示一个空头。它是否正确?

如何访问属性背后的代码?

+0

它看起来像该用户控件的DataContext的被设置为自身。删除datacontext并重试。此外,chekc绑定错误的输出窗口 – user1

+0

@ user1我想以这种方式绑定它,以便能够绑定到属性背后的代码。删除'DataContext'会中断'CellTemplate'的绑定。我认为问题的出现是因为我想将HeaderTemplate(对所有绑定项目都是相同的)绑定到属性后面的代码和'CellTemplate'(对于所有绑定项目不同)到'Configurations'中包含的属性上。 – Philippe

+0

@ user1 outupt窗口不显示任何绑定错误 – Philippe

回答

0

指定正确的源解决了我的问题:

<CheckBox Name="m_checkBoxExportAllDefinitions" 
      Content="{Binding ImportExportColumnHeader, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type importExport:ImportExportSelectionControl}}}" />