Получить путь привязки DataGridColumns из DataGridColumnHeader с MultiBinding в стиле DataGridHeader - PullRequest
0 голосов
/ 24 сентября 2019

В моем DataGridColumnHeaderStyle у меня есть следующее MultiBinding:

        <Setter Property="Command" Value="{Binding DataContext.AddFilterColumnCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
        <Setter Property="CommandParameter">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource MultiCommandParameterConverter}">
                    <Binding Path="Content" RelativeSource="{RelativeSource Mode=Self}" />
                    <Binding Path="Column.Binding.Path.Path" RelativeSource="{RelativeSource Mode=Self}" />
                </MultiBinding>
            </Setter.Value>
        </Setter>

У меня проблемы со второй привязкой.Он всегда возвращает {{DependencyProperty.UnsetValue}}

Однако, если во время работы приложения я изменяю режим RelativeSource на что-то другое, то снова снова работает нормально.

Я почесал голову над этимНекоторое время и, не глядя на конец других вопросов SO и используя Google, я не могу найти ответ на вопрос, почему это так и как я могу это преодолеть.

РЕДАКТИРОВАТЬ: Это мой код конвертера в случае, если онпомогает

class MultiCommandParameterConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    { return values.Clone(); }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    { return new object[] { value }; }
}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

ОК, кажется, я решил.

Вместо того, чтобы устанавливать стиль в моем <UserControl.Resources>, я применил его в <DataGrid>.

Я устанавливал свои стили в<UserControl.Resources>, поэтому они применяются ко всем элементам управления в UserControl, но, похоже, в этом случае мне нужно установить ColumnHeaderStyle в фактическом <DataGrid> для работы MultiBinding.

Вместо того, чтобы просто удалить вопрос Iрешил поставить это как мой ответ для всех, кто может наткнуться на это.

0 голосов
/ 25 сентября 2019

В зависимости от того, что вам нужно от привязки, вы можете сделать что-то вроде этого -

<Setter.Value>
    <MultiBinding Converter="{StaticResource MultiCommandParameterConverter}">
        <Binding Path="Content" RelativeSource="{RelativeSource Mode=Self}" />
        <Binding Path="DisplayIndex" RelativeSource="{RelativeSource Mode=Self}" />
        <Binding Path="DataContext" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=DataGrid}" />
    </MultiBinding>
</Setter.Value>

Проблема с заголовком столбца заключается в том, что привязка, связанная с этим столбцом, недоступначерез Datacontext заголовка, так что вы застряли с чем-то вроде этого.Или, если вы знаете собственность, к которой у вас всегда будет доступ, вы также можете сделать что-то вроде этого -

<Binding Path="DataContext.PropertyX" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=DataGrid}" />
...