2013-03-21 1 views
0

DataGrid의 속성을 통해 데이터를 바인딩 한 다음 나중에 해당 속성을 업데이트하여 DataGrid의 결과를 변경 (정렬)하려고합니다.WPF DataGrid가 BindingList에 작동하지 않고 결과를 표시하지 않습니다.

내가 처음에 데이터 그리드에 바인딩

:

BindingList<Booking> tourBookings; 

    private async void PageFrame_Loaded_1(object sender, RoutedEventArgs e) { 

      tourBookings = new BindingList<Booking>((await DataManager.BookingsRef.GetBookingHeaders(PageSize, CurrentPage)).TourBookings); 

      dgBookings.DataContext = tourBookings; 

    } 

것도이 시점에서 데이터 그리드에 없다, 내가 정렬 방법이 어느 쪽이든 :

private async void DataGrid_Sorting_1(object sender, DataGridSortingEventArgs e) { 

     tourBookings = new BindingList<Booking>((await DataManager.BookingsRef.GetBookingHeaders(s, asc, PageSize, CurrentPage)).TourBookings); 

    } 

는 .. 여전히 아무런 결과가없는 내 데이터 격자 ...

내 결과는 어디에 있습니까? 여기

너무 내 바인딩은 다음과 같습니다

  <DataGrid x:Name="dgBookings" DataContext="{Binding Path=tourBookings}" Style="{StaticResource DataGridStyle}" AutoGenerateColumns="False" CanUserAddRows="False" 
         ScrollViewer.PanningMode="VerticalOnly" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" 
         ScrollViewer.PanningDeceleration="5" ScrollViewer.PanningRatio="1" Grid.RowSpan="2" 
         Grid.Row="1" RowEditEnding="DataGrid_RowEditEnding_1" CanUserSortColumns="True" Sorting="DataGrid_Sorting_1"> 

      <DataGrid.Columns> 

       <DataGridTemplateColumn Width="*" SortMemberPath="Time" SortDirection="Ascending"> 
        <DataGridTemplateColumn.Header> 
         Time 
        </DataGridTemplateColumn.Header> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding StartTime, StringFormat=HH:mm}" /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 

       <DataGridTemplateColumn Width="*" SortMemberPath="TourID"> 
        <DataGridTemplateColumn.Header> 
         Tour ID 1 
        </DataGridTemplateColumn.Header> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding TourID}" /> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 

..... and load of other properties and then close datagrid.columns etc 

답변

2

바인딩은, 공용 속성과 함께 작동하여 tourbookings 그냥 필드입니다.

BindingList<Booking> tourBookings {get;set;} 

편집 : 당신이 itemssource을 설정해야

<DataGrid ItemsSource="{Binding Path=tourBookings}" /> 

EDIT2 :

당신이 목록에 데이터 컨텍스트를 설정하는 경우

, 다음이

과 같아야 바인딩
<DataGrid ItemsSource="{Binding}" /> 
+0

하지만 i를 설정하면 내가 tourBookings 속성을 변경하면 temssource가 DataGrid를 업데이트하지 못하게됩니까? – Smithy

+0

ViewModel에서 IPropertyChanged를 구현해야합니다. –

+0

"변경"의 의미에 따라 다릅니다. 예 : 여행 예약 변경 tourbookings = new ... 그러면 PropertyChanged ("tourbookings")를 호출해야합니다. 여행 상품에 항목을 추가/제거하는 경우 컬렉션에 INotifyCollectionChanged를 구현해야합니다. 예 : ObservableCollection blindmeis

관련 문제