C# 如何更新ItemSource?

C# 如何更新ItemSource?,c#,silverlight,silverlight-4.0,binding,C#,Silverlight,Silverlight 4.0,Binding,如果DataContext更改TabControl不响应 <controls:TabControl x:Name="tabControlRoom" ItemsSource="{Binding ElementName=tabControlRoom, Path=DataContext, Converter={StaticResource ConverterCollectionToTabItems}, ConverterPara

如果DataContext更改TabControl不响应

<controls:TabControl  x:Name="tabControlRoom"
        ItemsSource="{Binding ElementName=tabControlRoom,
        Path=DataContext, 
        Converter={StaticResource ConverterCollectionToTabItems},
        ConverterParameter={StaticResource MyTabItemContentTemplate}}"   >
</controls:TabControl>
С转换

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    try
    {
    var context = (WorkSpaceContext) value;

    ControlTemplate controlTemplate = null;
    var date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, 0, 0);


    if(parameter!=null)
    {
        try
        {
        var listParam = (ObservableCollection<Object>) parameter;
        if(listParam.Count==3)
        {
            controlTemplate = (ControlTemplate)listParam[0];
            date = (DateTime) listParam[1];
            date = date.AddHours(DateTime.Parse(listParam[2].ToString()).Hour);
            date = date.AddHours(DateTime.Parse(listParam[2].ToString()).Minute);
        }
        else if (listParam.Count == 1)
        {

        }
        }
        catch (Exception)
        {


        throw;
        }
    }


    var workPanels = (IEnumerable)context.WorkPanels;
    var rooms = context.Rooms;
    if (workPanels!= null && rooms != null)
    {
        var tabItems = new List<TabItem>();

        foreach (var room in rooms)
        {
        int idRoom = room.id;
        var nowWorkPanels = from wp in context.WorkPanels
                    where wp.date == date && wp.Table.id_room == idRoom
                    select wp;


        string headerText = room.name;


        if (nowWorkPanels.ToList().Count==0)
        {
            var tabItem = new TabItem
                      {
                      DataContext = room,
                      Header = headerText,
                      };
            if (controlTemplate == null) 
            tabItem.Content = (object) room;
            else 
            tabItem.Content = new ContentControl {Template = controlTemplate};
            tabItems.Add(tabItem);
        }
        else 
        {
            var tabItem = new TabItem
            {
            DataContext = nowWorkPanels.ToList(),
            Header = headerText,


            };
            if (controlTemplate == null) 
            tabItem.Content = (object) nowWorkPanels.ToList();
            else 
            tabItem.Content = new ContentControl {Template = controlTemplate};
            tabItems.Add(tabItem);
        }

        }

        return tabItems;
    }
    return new List<TabItem>();
    }
    catch (Exception)
    {
    return null;
    }
}
您是否尝试过以下方法:-

 <controls:TabControl  x:Name="tabControlRoom"
    ItemsSource="{Binding Converter={StaticResource ConverterCollectionToTabItems},
    ConverterParameter={StaticResource MyTabItemContentTemplate}}"
 >
 </controls:TabControl>
注意:当绑定没有指定路径时,分配给当前DataContext的对象将成为使用的值。

您是否尝试过以下方法:-

 <controls:TabControl  x:Name="tabControlRoom"
    ItemsSource="{Binding Converter={StaticResource ConverterCollectionToTabItems},
    ConverterParameter={StaticResource MyTabItemContentTemplate}}"
 >
 </controls:TabControl>

注意:当绑定没有指定路径时,分配给当前DataContext的对象将成为使用的值。

@简单:将ConverterCollectionToTabItems的代码添加到问题中。@简单:将ConverterCollectionToTabItems的代码添加到问题中。是否意味着它只工作一次,但在数据上下文为随后更改?是否意味着它只工作一次,但在随后更改数据上下文时不工作?