2009-10-16 2 views
0

Я установил сетку и привязал ее к коллекции. Я могу редактировать элементы в коллекции через мою сетку, и изменения распространяются на коллекцию. И GUI показывает все в коллекции во время установки ItemSource. Но я программно меняю некоторые элементы в коллекции (после установки ItemSource), и эти изменения не отражаются в grid/GUI. Есть ли что-то еще, что мне нужно сделать, чтобы обновить его. FYI, для полей, которые я хочу редактировать (MoveToResource, ResourceKey и Тип ресурса), я установил режим TwoWay. Ниже моя сетка.Не удалось привязать список/сетку к коллекции

  <ListView Name="lstXAMLStrings" Margin="5" Grid.Row="1"> 
      <ListView.View>      
       <GridView> 
        <GridView.Columns> 
         <GridViewColumn Header="Extract?"> 
          <GridViewColumn.CellTemplate> 
           <DataTemplate> 
            <CheckBox Content="" IsChecked="{Binding Path=MoveToResource, Mode=TwoWay}" ></CheckBox> 
           </DataTemplate> 
          </GridViewColumn.CellTemplate> 
         </GridViewColumn> 
         <GridViewColumn Header="Text"> 
          <GridViewColumn.CellTemplate> 
           <DataTemplate> 
            <local:RichTextBlock RichText="{Binding Path=FormattedMatchedLines}" TextWrapping="Wrap" Width="650"></local:RichTextBlock> 
           </DataTemplate> 
          </GridViewColumn.CellTemplate> 
         </GridViewColumn> 
         <GridViewColumn Header="Key Name"> 
          <GridViewColumn.CellTemplate> 
           <DataTemplate> 
            <TextBox Text="{Binding Path=ResourceKey, Mode=TwoWay}" Width="150"></TextBox> 
           </DataTemplate> 
          </GridViewColumn.CellTemplate> 
         </GridViewColumn> 
         <GridViewColumn Header="Resource Type"> 
          <GridViewColumn.CellTemplate> 
           <DataTemplate> 
            <ComboBox ItemsSource="{Binding Source={StaticResource odp}}" SelectedItem="{Binding Path=Resource, Mode=TwoWay}"></ComboBox> 
           </DataTemplate> 
          </GridViewColumn.CellTemplate> 
         </GridViewColumn> 
        </GridView.Columns> 
       </GridView>     
      </ListView.View> 
     </ListView> 

ответ

1

Вам необходимо убедиться, что ваши предметы коллекции реализованы INotifyPropertyChanged.

Если каждый элемент, который вы меняете программно (правильно), реализует это, ваш ListView/GridView будет оставаться актуальным.

Это будет работать, если вы изменяете свои элементы коллекции программно или на другом экране.

+0

Это то, чего мне не хватает. Благодарю. – bsh152s

+0

Итак, теперь, когда я реализую INotifyPropertyChanged, элементы обновляются при программном изменении. Но теперь изменения, внесенные через графический интерфейс, не распространяются на элементы коллекции. Есть ли способ сделать то и другое? – bsh152s

+0

Брэндон: Он должен работать в обоих направлениях, если все выполнено правильно. Можете ли вы продемонстрировать свою коллекцию? –

2

ли реализовать ваш [вид] модель класса INotifyPropertyChanged и сгореть случай, когда используется множество свойство сбруя?

2

Вам необходимо убедиться, что сама коллекция, с которой вы привязываете данные, представляет собой наблюдаемую коллекцию (класс, реализующий интерфейс INotifyCollectionChanged). Возможно, вы сможете сгруппировать свой собственный класс, который реализует INotifyCollectionChanged, но это единственная причина, по которой ObservableCollection существует, и это может сэкономить вам некоторое время.

Наверх Как это сделать, есть msdn article.

+0

Joseph: Это позволит убедиться, что добавление/удаление элементов из коллекции обновляет представление. Это не повлияет на изменение свойства внутри одного элемента коллекции. Класс, содержащийся в коллекции, должен реализовать INotifyPropertyChanged для работы ... –

+0

@Reed Спасибо, я неправильно понял вопрос, который я думал, что он добавлял/удалял элементы программным путем из своей коллекции. – Joseph

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