..., 당신은 자신의 ContentTemplate를 오버라이드 (override) 할 것입니다. 상기 코드 DynamicColumnHeaderTextConverter의 변환() 메소드
<DataGrid.Resources>
<Style TargetType="{x:Type dg:DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource DynamicColumnHeaderTextConverter}">
<Binding BindsDirectlyToSource="True"/>
<Binding Path="ItemsSource" RelativeSource="{RelativeSource AncestorType={x:Type dg:DataGrid}}" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
2 개 값
- 열 헤더 즉 DataTable의 열 이름
- DataTable에 자신을받을 것이다.
고유하지 않은 이름을 반환합니다.
public class DynamicColumnHeaderTextConverter : IMultiValueConverter
{
public object Convert(object[] values, ...)
{
var columnName = (string)values[0];
var dataTable = (DataTable)values[1]; //// if you want to decide name based on some value in the DataTable.
switch(columnName)
{
case "MyColumn1" : return "MyColumn";
case "MyColumn2" : return "MyColumn";
}
return columnName;
}
}
이 정보가 도움이되는지 알려주십시오.
문제에 대해 자세히 설명해 주시겠습니까? Isnt DataTable은 원하는 것 (컬럼 이름의 고유성)을 올바르게 수행합니까? –
'DataGrid'에 고유하지 않은 헤더가 있기를 원합니다 - 표시 이름; UI에서! 'DataTable'에서 열 이름에 영향을 미치지 않고 (예외를 발생시킵니다). 나는 (보이는) 헤더 이름이 (논리적 인) 컬럼 이름과 연결되는 것을 원하지 않는다; 하지만 지금은 그렇습니다. –