【问题标题】:How update ItemSource?如何更新数据源?
【发布时间】:2011-09-10 17:25:57
【问题描述】:

如果 DataContext 更改 TabControl 没有反应

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

现在我必须在这里做,所以每次更改

tabControlRoom.ItemsSource = (IEnumerable)new Restaurant.Helpers.Converter.SourceToTabItemsConverter().Convert(
                tabControlRoom.DataContext,
                null,
                this.Resources["MyTabItemContentTemplate"],
                null);

С转换

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;
    }
}

【问题讨论】:

  • 您是在暗示它只工作一次,但在随后更改数据上下文时不能工作?

标签: c# silverlight silverlight-4.0 binding


【解决方案1】:

你试过这个吗:-

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

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

【讨论】:

  • @simply:将 ConverterCollectionToTabItems 的代码添加到您的问题中。
猜你喜欢
  • 2014-02-05
  • 1970-01-01
  • 2019-11-05
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 2015-07-17
相关资源
最近更新 更多