2

Я создаю приложение для отображения привязки данных, привязанного к ObservableCollection Records, где каждая запись имеет объект курса и объект ObservableCollection объектов результатов.Обновление Silverlight/Trigger IValueConverter в Listbox DataTemplate в DataGrid

Курс изменен с использованием блока автозаполнения. Коллекция результатов отображается в Listbox с реализацией IValueConverter для изменения цвета шаблона эллипса на основе критериев выбранного курса.

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

Есть ли способ вызвать обновление в XAML. Я добавил UpdateSource = Свойство, измененное на привязку списка, но это вызвало переполнение стека (ха-ха).

Вот код:

<data:DataGrid x:Name="MyDatGrid"> 
<data:DataGrid.Columns> 
    <data:DataGridTemplateColumn Header="Results"> 
     <data:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <ListBox ItemsSource="{Binding ListOfResults}"> 
       <ListBox.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal"/> 
        </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <Ellipse Width="20" Height="20" Fill="{Binding Converter={StaticResource resultToBrushConverter} }" Stroke="Black" StrokeThickness="1" /> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 
     </DataTemplate> 
     </data:DataGridTemplateColumn.CellTemplate> 
    </data:DataGridTemplateColumn> 
    <data:DataGridTemplateColumn Header="Course" > 
     <data:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <Border> 
        <input:AutoCompleteBox ItemsSource="{Binding Courses, Source={StaticResource coursesSource}}"/> 
       </Border> 
      </DataTemplate> 
    </data:DataGridTemplateColumn.CellTemplate> 

мне удалось подписаться на LostFocus события на поле автозаполнения и сбросить фильтр, который у меня уже есть на сетке. Но разве это неэффективно? Обновление вида на datagrid не влияет на этот метод.

Любые шаги в правильном направлении приветствуются. Пытаясь помешать себе больше серым :)

Были ли у вас мысли о получении выражения привязки списка в сетке и его обновлении, но нет подсказки?

Спасибо, ребята

ответ

1

Сначала убедитесь, что объект Record реализует INotifyPropertyChanged и свойство курса вызывает его.

Требуется ли конвертер в resultToBrushConverter для доступа к нескольким свойствам связанного объекта? Если это зависит только от курса, то используйте его путь Course.

Edit:

Предполагая, что у вас есть эти вещи в месте вашего связывания на Заливка должна выглядеть следующим образом: -

<Ellipse Width="20" Height="20" Fill="{Binding Coarse, Converter={StaticResource resultToBrushConverter} }" Stroke="Black" StrokeThickness="1" /> 

Теперь, связывание знает его мониторинг Грубое свойство должно обновить Заполните, когда событие PropertyChanged запускается для свойства Coarse.

+0

Спасибо за ответ. Объект Record реализует InotifyPropertyChanged, и курс вызывает его (проверяется точка останова). Преобразователь используется в связанной коллекции результатов. Внутренний преобразователь - код захватывает грубый и соответственно окрашивает круги. Как-то мне нужно изменить курс, чтобы обновить/вызвать привязку, чтобы конвертер был запущен и соответственно создал новые цвета. (Точка прерывания в конвертере проверяет, что она никогда не вызывается после начальной загрузки). Что-то, что влияет на триггеры курса Запись привязки обновления ... –