2009-08-31 2 views
2

Я здесь. У меня есть наблюдаемая коллекция, которая содержит бизнес-объекты. Я связал его с ItemsSource ListBox. Я обновляю X и Y моего объекта, и он отображается корректно в пользовательском интерфейсе во время выполнения, поскольку он связан с верхним и левым элементом. Но вот здесь проблема. Я также связал некоторые данные, которые будут отображаться в текстовом свойстве textblock, и данные будут отображать только начальное значение. Он никогда не обновляет текстовый блок Text независимо от того, сколько раз я его меняю.Элементы в ObservableCollection, не обновляющие вид

Это XAML. Если вы видите проблему с XAML, пожалуйста, дайте мне знать. Как я уже сказал, привязка X/Y - Top/Left работает отлично и обновляется при изменении, TextBlock, привязанный к DisplayData, не работает.

Кроме того, мой бизнес-объект в моей коллекции реализует INotifyPropertyChanged.

Я попытаюсь сделать небольшую демонстрацию, чтобы воспроизвести ее, если ответ не может быть дан просто, глядя на XAML.

<Window x:Class="Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="614" Width="674"> 

<ListBox Name="PlottingBox" Background="White"> 

    <ListBox.ItemTemplate> 

     <DataTemplate> 

      <TextBlock Text="{Binding Path=DisplayData}" /> 

     </DataTemplate> 

    </ListBox.ItemTemplate> 

    <ListBox.Template> 

     <ControlTemplate TargetType="{x:Type ListBox}"> 

      <Border Background="{TemplateBinding Background}" 

       BorderBrush="{TemplateBinding BorderBrush}" 

       BorderThickness="{TemplateBinding BorderThickness}"> 

       <Canvas IsItemsHost="True" /> 

      </Border> 

     </ControlTemplate> 

    </ListBox.Template> 

    <ListBox.ItemContainerStyle> 

     <Style TargetType="{x:Type ListBoxItem}"> 

      <Setter Property="Canvas.Left" Value="{Binding Path=PlotX}" /> 

      <Setter Property="Canvas.Top" Value="{Binding Path=PlotY}" /> 

     </Style> 

    </ListBox.ItemContainerStyle> 

</ListBox> 

ответ

5

Я думаю, что проблема в коде за. Ваш XAML абсолютно легален и выглядит хорошо. Но прежде чем опубликовать исходный код убедитесь, что выполняются следующие условия:

  1. Ваш бизнес-объект реализует интерфейс INotifyPropertyChanged и вы поднимаете PropertyChanged событие каждый раз, когда значение DisplayData изменяется.

  2. Нет опечаток. Ни в определении свойства DipslayData, ни в PropertyChangedEventArgs, где вы передаете имя свойства «DispayData».

  3. DataContext объекта ListBoxItem относится к типу вашего бизнес-объекта. Проверьте его с помощью Snoop.

  4. Ошибки привязки во время выполнения отсутствуют. Запустите приложение в отладке и проверьте окно вывода. Вы также можете проверить это с помощью Snoop.

Надеюсь, что после заполнения этого контрольного списка у вас будет ответ.

Приветствия :)

+0

Anvaka, Спасибо, что посмотрели на это. 1. Да. 2. Проверено и ОК. 3. Пока не проверял. 4. Отсутствие ошибок привязки. Я создал небольшое приложение, чтобы воспроизвести эту ситуацию, и небольшое приложение работает отлично. Таким образом, вы абсолютно правы, он ДОЛЖЕН быть в моем коде. Я разберу код и отчитаюсь. Еще раз спасибо. – Doug

+0

Анвака, ты был прав. Вопрос был в моем коде. Проблема STUPD, STUPID. Я никогда не обновлял DisplayData после Sub New. DOH! Извините, если я потратил ваше время. Doug – Doug

+0

Я рад, что вы нашли ответ :). Поздравления! – Anvaka

1

бизнес-объекты должны реализовывать интерфейс INotifyPropertyChanged, так что пользовательский интерфейс уведомляется об изменении и может обновлять, чтобы отразить новое значение

+1

Да, это так, я заявил, что в приведенном выше. – Doug

0

Эмм, то DataContext внутри ListBox является элемент списка ItemsSource.

например, если вы ListBox привязаны к ObservableCollection, DataContext внутри ListBox будет объектом Person, а не datacontext родителя.

Если у вас есть TextBlock со связыванием, привязка укажет на объект Person, другими словами, personInstance.DisplayData, а не parentDC.DisplayData.

Я не знаю поведения без ItemsSource.

Возможно, вы знаете это, но, возможно, это вам поможет.

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

  • Нет связанных вопросов^_^