Почему мультисвязывание требует, чтобы возвращаемый объект отличался от входного? - PullRequest
0 голосов
/ 05 декабря 2018

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

Типичный сценарий: размещение нескольких вещей в шаблоне данных в некотором теге. Конечная цель заключается в том, чтобы внутри этого тега был массив элементов управления. Поскольку я привязываюсь к свойству object type, мне нужно использовать конвертер.

<Button Content="Test" >
    <Button.Tag>
        <MultiBinding Converter="{StaticResource mbc}">
            <Binding ElementName="sdbr"/>
            <Binding ElementName="ldbr"/>
        </MultiBinding>
    </Button.Tag>
</Button>

The mbc - это экземпляр преобразователя этого типа:

public class MultiConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values; //<--This here is a line of interest
    }
... ConvertBack is default;

Теперь проблема: даже если вход values содержит правильные данные, Tag получает new object[]{null, null} в качестве результирующего значения.Пока я возвращаю что-то отличное от входного массива - он работает просто отлично.Все они работают правильно:

return values.Clone(); /*option a*/
return new List<object>(values); /*option b*/
return values.Cast<Whatever>().ToList(); /*option c*/

Я проверил, но нигде не нашел требования вернуть что-либо, кроме входного значения в MSDN.И кроме того, даже если такая вещь существует, с какой стати она возвращает мне массив надлежащей длины, но с null s внутри?!

...