我遇到了一个问题,即在列标题的字符串属性后面绑定代码。运行应用程序时,标题始终为空字符串。
<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
属性;这就是它显示空标题的原因。这是对的吗?
如何访问属性后面的代码?
答案 0 :(得分:0)
指定正确的来源解决了我的问题:
<CheckBox Name="m_checkBoxExportAllDefinitions"
Content="{Binding ImportExportColumnHeader, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type importExport:ImportExportSelectionControl}}}" />