2009-10-21 3 views
0

Я пытаюсь привязка к ListBox так: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 уже используется.

+0

Я могу заставить его работать, если я создаю оболочку вокруг моего объекта, которая реализует INotifyPropertyChanged с одним свойством моего объекта. Затем привяжите это свойство. Но мне также нужно, чтобы оболочка реализовала метод, который явным образом вызывал при изменении коллекции, чтобы событие могло вызвать PropertyChanged ... Кажется, это ужасный взлом ... – Kelly

ответ

4

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

+0

Ох, хорошая идея .. Никогда не думал об этом , Я отдам его. – Kelly

+0

Работает отлично! Спасибо, я избиваю голову над этим в течение большей части дня. – Kelly

+0

Рад, что я мог бы помочь. ;) –

1

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

Смежные вопросы