我的课程如下:
class test
{
public string Name;
public string Location;
}
通过使用实体框架的查询结果,我得到了一个测试对象的集合,我直接将其设置到我的列表框中。但是使用DisplayMemberPath Iam只显示Name值。所以现在列表框中包含了整个测试对象集合,但只显示了Name值。
当我尝试绑定到列表框的selecteditem时,我将整个测试对象作为字符串,但我只需要在selecteditem结果中使用Name值。
我的XAML如下:
<ListBox x:Name="lbSubSelector" Height="200" DisplayMemberPath="Name" SelectedItem="{Binding Name, Mode=TwoWay}" />
填充列表的代码如下:
LoadOperation<test> subLoadOp = context.Load(context.GetTestQuery());
lbSubSelector.ItemsSource = subLoadOp.Entities;
lbSubDistrictSelector.DataContext = SkillModel.Instance;
selectedItem所设置的DataContext具有测试对象的整个字符串表示形式的值,但我希望selecteditem只返回显示的Name值(因为我已将displaymemberpath设置为Name)而不是以字符串格式返回整个对象。
我怎样才能做到这一点?
答案 0 :(得分:3)
使用以下内容:
<ListBox x:Name="lbSubSelector" Height="200" DisplayMemberPath="Name" SelectedValuePath="@Name" />
然后您可以使用 lbSubSelector.SelectedValue 来获取所选项目的Name属性。
答案 1 :(得分:0)
请使用Listbox上的IsSynchronizedWithCurrentItem属性,并将SelectedItem绑定更改为xaml代码中的/ Name,如下所示:
<ListBox x:Name="lbSubSelector" Height="200" DisplayMemberPath="Name" SelectedItem="{Binding /Name, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True"/>
答案 2 :(得分:0)
我建议你使用带有GridColumns的ListView,而不是使用ListBox。以下是片段,您可能需要相应地重新修改它。但这肯定会按照你想要的方式运作: -
<ListView Name="ListView1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding}" MouseDoubleClick="transactionListView_MouseDoubleClick" IsSynchronizedWithCurrentItem="True" >
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource gridViewHeaderColumnStyle}">
<GridView.Columns>
<GridViewColumn Width="70" Header="Name" DisplayMemberBinding="{Binding Path=Name}" />
<GridViewColumn Width="270" Header="Seller" DisplayMemberBinding="{Binding Path=Location}" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>