有2个班级。一个是父类,它包含第二个类的列表作为属性。 第二类也有一个列表。
问题是应用程序没有绑定第二个类中的列表。
应用程序将显示从第二个类列表(在父类中)绑定的网格列表,每个网格将显示第二个类中列表中的信息。
现在每个网格都没有绑定值
Class Parent{
public List<NestedClass> Child { get; set; }
.
.
.
}
Class NestedClass{
public ObservableCollection<SomeParameter> Params{ get; set; }
public string Name
{
get
{
return "Hello world";
}
}
.
.
.
}
xaml如下。
<ItemsControl HorizontalContentAlignment="Stretch" ItemsSource ="{Binding Child}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding Child.Params}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="80"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<TextBlock Text="{Binding Count}" />
</Grid>
<Grid Grid.Column="1"></Grid>
<Grid Grid.Column="2"></Grid>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
输出窗口显示如下
System.Windows.Data错误:40:BindingExpression路径错误:'对象'''NestedClass'(HashCode = 16626097)'上找不到'Params'属性。 BindingExpression:路径=参数; DataItem ='NestedClass'(HashCode = 16626097); target元素是'ItemsControl'(Name =''); target属性是'ItemsSource'(类型'IEnumerable')
已编辑#1 已添加xaml
已编辑#2 添加了输出消息
已编辑#3 在NestedClass中添加了name属性
答案 0 :(得分:0)
无论你是否尝试过它是否有效,正确的方法是@groupgrip提到:
<ItemsControl HorizontalContentAlignment="Stretch" ItemsSource="{Binding Child}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding Params}">
...
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
DataContext
的{{1}}将设置为DataTemplate
集合中Child
类型的项目。此类有一个名为NestedClass
的属性,因此我们可以Params
直接使用Bind
内的属性。在该类中还应该有一个名为DataTemplate
的属性,因为您还在Count
内尝试Bind
。
无论哪种方式,解决这些类型的问题的方法是阅读Visual Studio的输出窗口中的错误。您经常会收到类似“无法在该对象上找到此属性”的错误,这些错误应该可以帮助您跟踪并解决任何问题。
答案 1 :(得分:0)
对于“Parent”类,使用HierarchicalDataTemplate,对于child - DataTemplate。在资源中定义两个模板。
<Grid>
<Grid.Resources>
<HierarchicalDataTemplate DataType="{x:Type vm:Parent}" ItemsSource="{Binding Children}">... </>
<DataTemplate DataType="{x:Type vm:Child}">...</>
</Grid.Resources>
<ItemsControl ItemsSource="{Binding Parents}">...</>
</Grid>