2009-10-16 2 views
0

나는 그리드를 설정하고 컬렉션에 바인딩했습니다. 내 표를 통해 컬렉션의 항목을 편집 할 수 있으며 변경 내용이 컬렉션에 전파됩니다. 그리고 GUI는 ItemSource가 설정 될 때 컬렉션의 모든 것을 보여줍니다. 그러나 (ItemSource가 설정된 후) 컬렉션의 항목 중 일부가 프로그래밍 방식으로 변경되고 이러한 변경 내용이 표/GUI에 반영되지 않습니다. 새로 고침을하기 위해 내가해야 할 일이 있습니까? 참고로, 편집하려는 필드 (MoveToResource, ResourceKey 및 Resource Type)에 대해 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를 구현 했으므로 프로그래밍 방식으로 변경하면 항목이 업데이트됩니다. 그러나 이제는 GUI를 통해 변경 한 사항이 콜렉션 항목으로 전달되지 않습니다. 둘 다 할 수있는 방법이 있습니까? – bsh152s

+0

Brandon : 모든 것이 제대로 구현 되었다면 두 가지 방식으로 작동해야합니다. 컬렉션 구현을 보여줄 수 있습니까? –

2

당신의 [보기] 모델 클래스는 속성 집합 접근이 사용될 때마다 이벤트를 INotifyPropertyChanged를 구현하고 화재합니까?

2

데이터 바인딩 할 컬렉션 자체가 관찰 가능한 컬렉션 (INotifyCollectionChanged 인터페이스를 구현하는 클래스)인지 확인해야합니다. INotifyCollectionChanged를 구현하는 자신 만의 클래스를 롤백 할 수도 있지만 ObservableCollection이 있기 때문에 시간이 절약 될 수 있습니다.

수행 방법은 msdn article입니다.

+0

Joseph : 이렇게하면 컬렉션에 요소를 추가/제거하면보기가 업데이트됩니다. 컬렉션의 한 요소 내에서 속성을 변경하는 데 아무런 영향을 미치지 않습니다. 컬렉션의 포함 된 클래스는 작동하도록 INotifyPropertyChanged를 구현해야합니다. –

+0

@Reed Thanks, 나는 그가 자신의 컬렉션에서 프로그래밍 방식으로 아이템을 추가/제거하고 있다고 생각하는 질문을 잘못 읽었습니다. – Joseph

관련 문제