Используя 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>
Надеюсь это поможет!