DataContext не распространяется на детей (не визуально) в пользовательском элементе управления - PullRequest
2 голосов
/ 18 июля 2011
<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. Хак в классе 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
                });
        }
    }
}

1 Ответ

4 голосов
/ 18 июля 2011

Вы должны добавить свой GridViewExportOptions в качестве логического ребенка.По сути, ваш GridViewExportOptions должен был бы быть производным от FrameworkElement.Когда ваше свойство изменяется, вам нужно будет AddLogicalChild на вашем GridView (и RemoveLogicalChild, чтобы удалить старое значение, если оно есть).Тогда вам придется переопределить LogicalChildren на вашем GridView и включить ваш вариант.

Вам также необходимо сделать это в вашем классе GridViewExportOptions, в отношении егодети».

...