我想将ObservableCollection绑定到数据模板内的Itemscontrol,也就是另一个数据模板内的Itemscontrol:
<ListView x:Name="list_befehlsfolge" Margin="5">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type local:Befehlszeile}" >
<Expander Margin="5" Header="{Binding Path=Bezeichnung,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
<ItemsControl ItemsSource="{Binding Path=SubBefehlsliste}">
<DataTemplate DataType="{x:Type local:SubZeile_Text}">
<TextBox Text="{Binding Path=text,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>
</DataTemplate>
</ItemsControl>
</Expander>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
用代码隐藏将源代码绑定到list_befehlsfolge.Itemsource
是没有问题的,但是如何绑定SubBefehlsliste
呢?
当我创建一个SubBefehlsliste
的新示例时
public class Befehlszeile : Position
{
public string Bezeichnung { get; set; } = "Befehlsname";
// crash at this line:
public ObservableCollection<Position> SubBefehlsliste { get; set; } = new ObservableCollection<Position>();
public Befehlszeile()
{
// SubBefehlsliste.Add(new SubZeile_Text());
}
}
它崩溃并显示错误
无效操作异常错误:使用“ItemsSource”时操作无效。请改用ItemsControl.ItemsSource来访问和修改项。
(位置是SubZeile_Text等所有数据类型的“母”类,用于将所有数据类型添加到ObservableCollection)
2条答案
按热度按时间vql8enpb1#
您忘记指定模板的属性。因此,您指定的模板试图添加到ItemsControl.Items集合中。
但不能同时使用ItemsSource和项目。
另一个不可思议的时刻:在Sharpe代码中,您将
Position
类用于集合的元素,而在Data Template中,您将设置local:SubZeile_Text
类型。以下哪个选项是正确的?
附言提示:如果不定义列,则使用ListBox,而不是ListView。
fwzugrvs2#
最后我发现了问题,数据模板必须在“<ListView.Resources>“和“<ItemsControl.Resources>“内: