示例代码。在工作代码中,所有接口,特别是INotifyPropertyChanged
,都按应有的方式实现,这里我省略了很多点。我认为问题的本质会很清楚
我有一个对象集合
public ObservableCollection<ObjKind_1> ObjKind_1Collection { get; set; }
该类ObjKind_1
本身是:
public class ObjKind_1
{
public ObservableCollection<ObjKind_2> ObjKind_2Collection { get; set; }
public ObjKind_1()
{
ObjKind_2Collection = new ObservableCollection<ObjKind_2>();
}
}
反过来ObjKind_2
,有:
public class ObjKind_2
{
string _dbname;
public ObjKind_2()
{
}
public string DBname
{
get => _dbname;
set => Set(ref _dbname, value);//реализация INotifyPropertyChanged
}
}
实际的 XAML 代码:
<ListView ItemsSource = "{Binding ObjKind_1Collection}" >
< ListView.ItemTemplate >
< DataTemplate >
< StackPanel >
< ListView ItemsSource="{Binding ObjKind_2Collection}">
<TextBlock Text = "{Binding DBname}" />
</ ListView >
</ StackPanel >
</ DataTemplate >
</ ListView.ItemTemplate >
</ ListView >
而且这段代码不起作用。在向集合中添加元素时发誓ObjKind_2Collection
并引用字符串<TextBlock Text = "{Binding DBname}" />
。在调试器中我得到:
InvalidOperationException: Операция недопустима, когда ItemsSource используется. Вместо этого получите доступ и измените элементы с помощью ItemsControl.ItemsSource.
我发现了一些英文的东西。堆栈,但我不明白的是如何使用它https://stackoverflow.com/questions/11089104/operation-is-not-valid-while-itemssource-is-in-use-access-and-modify-元素-w
我哪里做错了?对不起,如果我很笨
将
ItemTemplate
元素设置为ListView
。这是那部分:
错误的。您需要再次指定
ItemTemplate
:相反,您指定内部列表的内容。