更改选定的选项卡时更新tabitem datatemplate

时间:2014-03-21 12:55:50

标签: wpf xaml mvvm

我有一个Cal Collection类型的对象(MyCals)。 (Cal是一个对象)。

MyCals由2个Cal组成,其中每个Cal都有事件列表(事件没有实现INotifyPropertyChanged接口,它有许多属性,如Summary,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的数据显示该数据网格,但是当我选择第二个选项卡时,数据网格中的数据不会更新 (MyCals中的相同事件[1])

非常感谢任何帮助

1 个答案:

答案 0 :(得分: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; }
}

如果我的样本没有帮助,请分享更多有关背后代码的内容。