DataContext不会在自定义控件中传播到子控件(非可视)

本文关键字:控件 可视 传播 自定义控件 DataContext | 更新日期: 2023-09-27 18:02:21

<k:GridView Name="_masterGridView" 
            ItemsSource="{Binding ProductLocationList}" 
            SelectedItem="{Binding ProductLocationSelected}">
<!-- DataContext does not propagate here automatically in user control... why? -->
    <k:GridView.ExportOptions>
         <k:GridViewExportOptions Title="Production Location Management">
             <k:SearchCriteria >
                 <k:SearchCriterion Title="End Date"
                                    Value="{Binding SearchEndDate}"
                                    ValueFormat="g" />
             </k:SearchCriteria>
         </k:GridViewExportOptions>
    </k:GridView.ExportOptions>
<!-- to here -->

我必须这样做,它只传播到GridViewExport选项这个hack是在GridView类中…

public GridViewExportOptions ExportOptions
{
    get { return _exportOptions; }
    set
    {
        _exportOptions = value;
        if (value != null)
        {
            ExportOptions.SetBinding(FrameworkContentElement.DataContextProperty,
                new Binding("DataContext")
                {
                    Source = this,
                    Mode = BindingMode.TwoWay
                });
        }
    }
}

DataContext不会在自定义控件中传播到子控件(非可视)

您需要将GridViewExportOptions添加为逻辑子节点。实际上,你的GridViewExportOptions必须由FrameworkElement导出。当你的属性被改变,你必须AddLogicalChild在你的GridView(和RemoveLogicalChild删除旧的值,如果有的话)。然后你必须覆盖你的GridView上的LogicalChildren,并包括你的选项。

你需要在你的GridViewExportOptions类中也这样做,关于它的"孩子"。