WPF绑定和上下文

时间:2014-07-21 11:27:05

标签: c# wpf data-binding

我遇到了一个问题,即在列标题的字符串属性后面绑定代码。运行应用程序时,标题始终为空字符串。

<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>

正如您所看到的,DataContext的{​​{1}}正在设置为自身,而数据网格的UserControl正在设置为Configurations,这是此代码隐藏属性:

ItemsSource

在用于绑定标题文本的代码隐藏属性(在public ObservableCollection<ImportExportConfiguration> Configurations { get; private set; } 中定义)中设置断点时,永远不会调用getter:

HeaderTemplate

public string ImportExportColumnHeader { get { return IsImport ? ErgaenzungsfelderResources.ImportExportSelectionControlImportierenColumnHeader : ErgaenzungsfelderResources.ImportExportSelectionControlExportierenColumnHeader; } } CellTemplate的绑定有效。这是IsDefinitionExportEnabled类中包含的属性,而ImportExportConfiguration不是。

我想wpf会尝试从ImportExportColumnHeader获取不存在的ImportExportColumnHeader属性;这就是它显示空标题的原因。这是对的吗?

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

1 个答案:

答案 0 :(得分:0)

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

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