2014-03-21 5 views
0

У меня есть объект (MyCals), который является типом коллекции Cal. (Cal - это объект).Обновление tabitem datatemplate при изменении выбранной вкладки

The MyCals состоит из 2-Cal, где каждый Cal имеет список событий (Events не имеет интерфейс INotifyPropertyChanged реализован, он обладает многими свойствами, как Резюме, Id, ...)

<TabControl ItemsSource="{Binding Path=MyCals, UpdateSourceTrigger=PropertyChanged}"> 
       <TabControl.ItemTemplate> 
        <DataTemplate> 
         <!-- Tab Header --> 
         <TextBlock Text="{Binding Path=ProductID}" /> 
        </DataTemplate> 
       </TabControl.ItemTemplate> 

       <!-- Content --> 
       <TabControl.ContentTemplate> 
        <DataTemplate> 
         <Grid> 
         <DataGrid AutoGenerateColumns="False" 
            HorizontalGridLinesBrush="LightGray" 
            ItemsSource="{Binding Path=Events, UpdateSourceTrigger=PropertyChanged}" 
            VerticalGridLinesBrush="LightGray"> 
          <DataGrid.Columns> 
           <DataGridTextColumn Binding="{Binding Summary}" Header="Summary" /> 
                  </DataGrid.Columns> 
         </DataGrid> 
         </Grid> 
        </DataTemplate> 
       </TabControl.ContentTemplate> 
      </TabControl> 

теперь TabControl покажет 2 вкладки с правильным заголовком, но Datagrid не будет обновляться при изменении другой вкладки. Таким образом, если выбрана первая вкладка, этот файл данных будет показан с данными из первого Cal, но когда я выберу вторую вкладку, данные в datagrid не будут обновляться. (То же самое событие в MyCals [1])

любая помощь действительно оценивается

ответ

0

Я не знаю, как вы реализовали ViewModel, поэтому я сделал быстрый тест, и он работает.

Это код ViewModel:

class MainViewModel : AbstractViewModel 
{ 
    public MainViewModel() 
    { 
     this.MyCals = new ObservableCollection<Cal>(); 
     this.MyCals.Add(new Cal()); 
     this.MyCals.Add(new Cal()); 
    } 

    public ObservableCollection<Cal> MyCals { get; set; } 
} 

public class Cal 
{ 
    public Cal() 
    { 
     this.ProductID = "Product " + Guid.NewGuid().ToString(); 

     this.Events = new ObservableCollection<Event>(); 
     this.Events.Add(new Event()); 
     this.Events.Add(new Event()); 
    } 

    public string ProductID { get; set; } 

    public ObservableCollection<Event> Events { get; set; } 
} 

public class Event 
{ 
    public Event() 
    { 
     this.Summary = "Event Summary " + Guid.NewGuid().ToString(); 
    } 

    public string Summary { get; set; } 
} 

Пожалуйста, поделитесь немного о коде позади, если мой пример не помогло.

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