열이로드 될 때까지 초기화가 지연되는 솔루션이 등장했습니다. 그러면 모든 속성을 사용할 수 있습니다.
public class SpreadsheetCellTemplateListing : DependencyObject
{
public DataTemplate structTemplate { get; set; }
public DataTemplate atomicTemplate { get; set; }
}
internal class SpreadsheetDataGrid : DataGrid
{
private bool InitializeColumnsOnLoad = false;
public SpreadsheetDataGrid()
{
Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
if (InitializeColumnsOnLoad)
{
InitializeColumns();
}
}
public static readonly DependencyProperty TemplateListingProperty =
DependencyProperty.Register("TemplateListing", typeof (SpreadsheetCellTemplateListing),
typeof (SpreadsheetCellTemplateListing), new PropertyMetadata(null));
public SpreadsheetCellTemplateListing TemplateListing
{
get { return (SpreadsheetCellTemplateListing) GetValue(TemplateListingProperty); }
set { SetValue(TemplateListingProperty, value); }
}
protected override void OnItemsSourceChanged(System.Collections.IEnumerable oldValue,
System.Collections.IEnumerable newValue)
{
base.OnItemsSourceChanged(oldValue, newValue);
if (!IsLoaded)
{
InitializeColumnsOnLoad = true;
}
else
{
InitializeColumns();
}
}
}
당신은'base.OnItemsSourceChanged (oldValue입니다, NEWVALUE) 전에 변경하려고 않았다' – safi
의 널 (null)을이 경우에 너무 불행하게도 – Asheh
가 null가 아닌되어야하는 이유? AFAIK, 특히 데이터 바인딩을 사용할 때 종속성 속성 할당 순서는 정의되지 않습니다. 두 속성의 변경 내용을 처리해야합니다. –