맞는 솔루션인지 모르겠지만 해결이 되어서 업데이트합니다.
<unit:GdtDataGrid Margin="{StaticResource DataGridBorderInterval}"
AutoGenerateColumns="False"
Background="{StaticResource DataGridAreaBackgroundBrush}"
BorderBrush="{StaticResource GdtDataGridBorderBrush}"
BorderThickness="1"
ColumnHeaderBackgroundBrush="{DynamicResource Theme_PopupDataViewColumnHeaderColorBrush}"
CornerRadius="{DynamicResource Theme_AllCornerRadius}"
ItemsSource="{Binding Source={StaticResource ItemsSort}}"
Visibility="{Binding Items.Count, Converter={cnvt:EmptyCollectionToVisibilityConverter}}">
...
<DataGrid.Columns>
<DataGridTemplateColumn x:Name="dcChecked"
Width="Auto"
MinWidth="50">
<DataGridTemplateColumn.Header>
<unit:GdtCheckBox IsThreeState="False">
<unit:GdtCheckBox.IsChecked>
<Binding FallbackValue="False"
Path="DataContext.IsAllChecked"
UpdateSourceTrigger="PropertyChanged">
<Binding.RelativeSource>
<RelativeSource AncestorType="{x:Type unit:GdtDataGrid}" Mode="FindAncestor" />
</Binding.RelativeSource>
</Binding>
</unit:GdtCheckBox.IsChecked>
</unit:GdtCheckBox>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<unit:GdtCheckBox HorizontalAlignment="Center"
VerticalAlignment="Center"
IsChecked="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
</DataGrid.Columns>
</unit:GdtDataGrid>
형태는 위처럼 생겼었습니다.
이 DataGrid의 Items.Count가 0일 경우 보기 싫어서 아래 컨버터로 Items.Count가 0일 때 Visibility를 바꿨었습니다.
public sealed class EmptyCollectionToVisibilityConverter : ConverterMarkupExtension<EmptyCollectionToVisibilityConverter>
{
public override object? Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int count = System.Convert.ToInt32(value);
Visibility result = count == 0 ? Visibility.Collapsed : Visibility.Visible;
return result;
}
public override object? ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
여기서 아래 부분이 틀렸었네요.
Visibility result = count == 0 ? Visibility.Collapsed : Visibility.Visible;
저걸 Hidden으로 바꿔주면 바인딩에러가 발생하지 않고 정상 동작합니다.
Visibility result = count == 0 ? Visibility.Hidden : Visibility.Visible;
지금 프로젝트 마감 기간이라서 막히는 것을 제껴두고, 다른 일을 하다가… 혹시 몰라 바꿔본게 얻어 걸리게 되었습니다.
테스트 소스를 재현해서 올리려고 했었는데 그 전에 해결되었네요.
답변 주신 분들 모두 감사드립니다.