C# 如何更新ItemSource?
如果DataContext更改TabControl不响应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
<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的代码添加到问题中。是否意味着它只工作一次,但在数据上下文为随后更改?是否意味着它只工作一次,但在随后更改数据上下文时不工作?