您好我在理解使用嵌套对象的WPF数据绑定时遇到了问题。
我有一个工作组类,其中包含名为 ListMembers 的User_activation对象列表,我想显示其属性。如何访问其嵌套属性?此类包含另一个名为用户的对象,该对象具有其用户名,最终我想在组合框中显示用户名而不是WPF_test.User_activation。
下面是XAML代码和相应的布局:
<ListView x:Name="ListViewWorkgroups" VerticalAlignment="Top" Height="Auto" Width="Auto" ItemsSource="{Binding listWorkgroups}">
<ListView.View>
<GridView>
<GridViewColumn Width="auto" Header="Workgroup" DisplayMemberBinding="{Binding Name}"></GridViewColumn>
<GridViewColumn Width="auto" Header="Skills">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ListSkills}" ></ComboBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="auto" Header="Members">
<GridViewColumn.CellTemplate>
<DataTemplate >
<ComboBox IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ListMembers}" ></ComboBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
布局:http://i50.tinypic.com/ydy5h.png
谢谢!
答案 0 :(得分:2)
您需要为ComboBox设置ItemTemplate
<ComboBox IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ListMembers}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding User.Username}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
作为替代方案,如果您不需要任何复杂的东西,可以绑定DisplayMemberPath
<ComboBox IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ListMembers}" DisplayMemberPath="{Binding User.Username}"/>
你使用“。”像访问普通的c#代码一样访问属性
答案 1 :(得分:0)
这只是对上一个答案的后续跟进。我刚刚发现在Bindings中,您可以使用文件系统方式的前导句点:
<ComboBox ItemsSource="{Binding .ListMembers}">
<DataTemplate>
<TextBlock Text="{Binding .User.Username}"/>
</DataTemplate>
该语法在语义上没有添加任何内容,但在某些情况下使语句更具可读性(并且XAML可以确定使用它!)
以下是一个更好的例子:
<ComboBox ItemsSource="{Binding Caliber}" DisplayMemberPath=".Thickness" />
其中Thickness
是Caliber
的属性。