У меня есть кнопка с некоторой MultiBinding, к которому присоединена команде:MultiBinding и мутация в WPF
<Button Content="remove" HorizontalAlignment="Right" VerticalAlignment="Top" Cursor="Hand" Focusable="False">
<Button.Command>
<Binding Path="DataContext.DeleteColumnCommand" ElementName="treeView" />
</Button.Command>
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource midConverter}">
<Binding Path="Text" ElementName="tableName"/>
<Binding Path="Name" />
</MultiBinding>
</Button.CommandParameter>
</Button>
Я вижу, что, когда я ставлю точку останова в преобразователе, каждое значение устанавливается и выглядит как он работает.
Однако, когда на самом деле вызывается команда, я получаю в качестве аргумента массив, заполненный нулями!
Я предполагаю, что WPF повторно использует и изменяет массив, который я видел в моем конверторе, который не делает глупостей, поскольку это ссылочный тип, который я не выделил, и в контексте максимальной производительности WPF очень необходим.
Мой вопрос: что лучше всего обобщает руководство/гарантии вокруг мутации, подобные тому, что есть в WPF?
Есть ли правило вокруг этого?
PS: Я вижу here, что другие люди имели одинаковую проблему и, по-видимому, не понимали происхождение.
PPS: Я не делал свой вопрос достаточно ясным, но естественно, что нужно выделять новую структуру, список, массив, что угодно, в кучу, поскольку тот, который вы получаете, может быть повторно использован. Вопрос: из этого ad-hoc примера, каковы правила WPF в таких случаях?
показать ваш конвертер код – blindmeis
Я не хочу говорить о преобразователе, а о мутации. сам преобразователь тривиален. – nicolas