c# - DataContext 不会传播到自定义控件中的子级(非可视)

标签 c# wpf xaml data-binding datacontext

<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 -->

我必须执行此 hack,它只会传播到 GridViewExport 选项 黑客在 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
                });
        }
    }
}

最佳答案

您需要将 GridViewExportOptions 添加为逻辑子项。实际上,您的 GridViewExportOptions 必须从 FrameworkElement 派生。当您的属性(property)发生变化时,您必须AddLogicalChild在您的 GridView 上(以及删除旧值(如果有))。那么你必须覆盖 LogicalChildren在您的 GridView 上并包含您的选项。

您还需要在 GridViewExportOptions 类中针对它的“子级”执行此操作。

关于c# - DataContext 不会传播到自定义控件中的子级(非可视),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6736793/

相关文章:

c# - 将 Java/Android 连接到 .NET Web 服务

c# - 如何在 8*8 DataMatrix 中编码超过 3 个字符?

WPF 应用程序显示 "Image format is unrecognized "

silverlight - 如何将一个xaml页面导航到另一个页面?

c# - 添加项目到集合的更新 UI 已更改

c# - 如何画三点角的圆弧?

c# - C# 中是否可以使用基于堆栈的数组?

wpf - 从 ViewModel 闪烁图像

c# - WPF 文本框动画不起作用?

wpf - 带有背景图像和颜色的文本框