バインディング評価はで後で起こる
public class DataGridColumnFilter : Control
{
static DataGridColumnFilter()
{
DefaultStyleKeyProperty.OverrideMetadata(
typeof(DataGridColumnFilter), new FrameworkPropertyMetadata(typeof(DataGridColumnFilter)));
}
public DataGridColumnFilter()
{
this.Loaded += new RoutedEventHandler(DataGridColumnFilter_Loaded);
}
void DataGridColumnFilter_Loaded(object sender, RoutedEventArgs e)
{
// here is would be null!
var controller = ColumnEntity;
}
// For some reason this seems to be the only place to access the ColumnEntity
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
if (e.Property == ItemsSourceEntityProperty && e.OldValue != e.NewValue && null != DataGridEntity && ColumnEntity is DataGridColumn)
{
// here it works fine. The property has a proper value
var controller = ColumnEntity;
}
base.OnPropertyChanged(e);
}
#region Properties
public Query QueryEntity
{
get { return (Query)GetValue(QueryEntityProperty); }
set { SetValue(QueryEntityProperty, value); }
}
public static readonly DependencyProperty QueryEntityProperty =
DependencyProperty.Register("QueryEntity", typeof(Query), typeof(DataGridColumnFilter));
public DataGridColumn ColumnEntity
{
get { return (DataGridColumn)GetValue(ColumnEntityProperty); }
set { SetValue(ColumnEntityProperty, value); }
}
public static readonly DependencyProperty ColumnEntityProperty =
DependencyProperty.Register("ColumnEntity", typeof(DataGridColumn), typeof(DataGridColumnFilter));
public DataGrid DataGridEntity
{
get { return (DataGrid)GetValue(DataGridEntityProperty); }
set { SetValue(DataGridEntityProperty, value); }
}
public static readonly DependencyProperty DataGridEntityProperty =
DependencyProperty.Register("DataGridEntity", typeof(DataGrid), typeof(DataGridColumnFilter));
public IEnumerable ItemsSourceEntity
{
get { return (IEnumerable)GetValue(ItemsSourceEntityProperty); }
set { SetValue(ItemsSourceEntityProperty, value); }
}
public static readonly DependencyProperty ItemsSourceEntityProperty =
DependencyProperty.Register("ItemsSourceEntity", typeof(IEnumerable), typeof(DataGridColumnFilter));
#endregion
}