WPF привязка данных и конвертеры

Я пытаюсь привязать данные к списку примерно так:

<ListBox x:Name="MyListBox" Margin="0,0,0,65">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Converter={StaticResource MyConverter}}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Причина, по которой я привязываюсь ко всему объекту, а не к свойству, заключается в том, что моему конвертеру понадобятся несколько свойств объекта для построения возвращаемой строки.

Это работает, и моя строка возвращается. Но затем, когда я изменяю ObservableCollection, это на основе значения не изменяется на экране. Если я связываю только одно свойство и изменяю его, то значение меняется.

Что я могу сделать по-другому? Я не могу привязать ни к одному свойству, так как мне нужен весь объект в конвертере... И ConverterParameter уже используется.

2 ответа

Решение

Помните, что если вы связываетесь со свойством "main" и значение самого свойства main не изменяется, привязка не будет иметь оснований для обновления сама. Он не имеет ни малейшего представления, что ваш конвертер на самом деле основан на дополнительном свойстве. То, что вы можете сделать, это использовать MultiBinding, где вы привязываете не только "основное" свойство, но и определенное под-свойство. Это дает вашей реализации IMultiValueConverter доступ к основному объекту данных, но поскольку вы также привязываетесь к изменяющемуся под-свойству, оно также будет обновляться при изменении значения этого под-свойства.

Вы можете попробовать использовать MultiBinding, который, я считаю, обновляется всякий раз, когда запускается любая из его привязок. Вы также можете использовать IMultiValueConverter или просто использовать StringFormat привязки.

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