Используя CommandParameters и MultiBindings?

Можно ли использовать CommandParameter="{Binding}" в мульти-привязке? Я пытаюсь сделать это в сетке данных.

<CheckBox.CommandParameter>
    <MultiBinding Converter="{StaticResource CDetailConverter}">
        <Binding Path ="IsChecked" ElementName="chkSelection"/>                                        
        <Binding ConverterParameter="{Binding}"/>
    </MultiBinding>
</CheckBox.CommandParameter>

Вторая привязка выдает ошибку.

1 ответ

Решение

В двух словах, ответ - нет.

В вашем втором внутреннем Binding вы установили ConverterParameter, Есть несколько проблем с этим:

Первый, Binding это его собственный класс отдельно от MultiBinding с обоими Converter а также ConverterParameter свойства. Здесь вы установили ConverterParameter свойство без установки Converter имущество. Помни что ConverterParameter передается в Binding's указанный конвертер независимо от того, используется ли он в MultiBinding или нет. Если бы вы должны были добавить Converter здесь, тогда преобразователь будет передан указанный ConverterParameter,

То, что вы, вероятно, хотели сделать, это установить ConverterParameter на внешней MultiBinding который также имеет это свойство:

<CheckBox.CommandParameter>
    <MultiBinding Converter="{StaticResource CDetailConverter}" ConverterParameter="{Binding }">
        <Binding Path ="IsChecked" ElementName="chkSelection"/>                                        
    </MultiBinding>
</CheckBox.CommandParameter>

Если вы попробуете это, вы быстро увидите, что ConverterParameter не может быть целью Binding выражение, так как это не DependencyProperty,

Поскольку вы не можете связать с CommandParameterТипичный обходной путь заключается в изменении вашего IMultiConverter принять дополнительное значение и передать это значение через выражение привязки:

<CheckBox.CommandParameter>
    <!-- CDetailConverter updated to expect an additional value in the values array -->
    <MultiBinding Converter="{StaticResource CDetailConverter}">
        <Binding Path ="IsChecked" ElementName="chkSelection"/>
        <Binding />                                   
    </MultiBinding>
</CheckBox.CommandParameter>

Надеюсь это поможет!

Другие вопросы по тегам