如何绑定嵌套的ItemsControl的ItemsSource嵌套母ItemControl的绑定项
内一个ObservableCollection我有绑定到ObservableCollection
的ItemsControl
。里面那个ItemsControl
我有另一ItemsControl
这势必会包含在最外层ItemsControl
的的ObservableCollection的对象内的另一个ObservableCollection
。当XAML解析器试图建立最里面ItemsControl
的DataTemplate
有抛出的异常如何绑定嵌套的ItemsControl的ItemsSource嵌套母ItemControl的绑定项
System.Windows.Markup.XamlParseException:增加值 类型的集合‘System.Windows.Controls.ItemCollection’抛出例外。
和内部异常是:
System.InvalidOperationException:操作是无效的,而 的ItemsSource正在使用中。使用 而不是使用ItemsControl.ItemsSource访问和修改元素。
为了让更多一点清楚,这是我的XAML结构:
<Grid DataContext="{Binding ...Name of object holding ObservableCollection here}">
<ItemsControl Name="FilterItemsHolder" Grid.Row="1"
HorizontalAlignment="Stretch" VerticalAlignment="Top"
Margin="10,10,10,10" MinWidth="200"
Background="#151515"
ItemsSource="{Binding CheckedFilterColumns}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid MaxHeight="100">
<ItemsControl Name="FilterSelectionsHolder"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Margin="10,10,10,10" MaxHeight="50"
ItemsSource="{Binding FilterSelections}">
<DataTemplate>
<rb:RBFilterOptions x:Name="FilterOptions" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</DataTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
数据绑定项目的阶级结构是:
public class ClassThatHoldsCollections...
{
... some other properties
public ObservableCollection<RBDataColumn> CheckedFilterColumns { get; set; } //bound to outermost ItemsControl's (Name="FilterItemsHolder") ItemsSource
public ClassThatHoldsCollections...()
{
...initialize property values...
CheckedFilterColumns = new ObservableCollection<RBDataColumn>();
}
}
public class RBDataColumn
{
...some properties
public ObservableCollection<RBDataColumnFilterSelection> FilterSelections { get; set; } //bound to innermost ItemsControl's (Name="FilterSelectionsHolder") ItemsSource
public RBDataColumn()
{
...initialize property values...
FilterSelections = new ObservableCollection<RBDataColumnFilterSelection>();
}
}
奇怪的是,如果我注释掉<DataTemplate>...</DataTemplate>
不再抛出异常。如果我离开<DataTemplate></DataTemplate>
标记并仅在<rb:RBFilterOptions.../>
内注释掉引用的用户控件,则仍会抛出异常,这意味着它不能是导致此问题的基础用户控件。
在我看来,构建窗口的XAML分析器正试图添加内部ItemsControl
的值,同时仍然访问最外面的ItemsControl
's。
我的问题,分为两个部分,IS:
- 为什么抛出的异常?
- 是否有嵌套
ItemsControl
(胡)的ItemsSource
属性指出嵌套ObservableCollections
的方法吗?
的线索是在错误信息,即有出错了XAML。具体而言,您已经声明自己内心DataTemplate
为FilterSelectionsHolder
直接孩子,所以XAML分析器认为你将其添加为集合项目,而不是一个模板。尝试将内部DataTemplate
包装在ItemsControl.ItemTemplate
块中。
有时只需第二组的眼睛。 ;)
难以置信,我不敢相信我没有注意到!感谢您的帮助,我确信这将解决问题。我一直在头上撞墙。 – Kidiskidvogingogin