2011-11-14 118 views
2

内我有类类似如下:绑定到财产的ItemsSource

class test 
{ 
    public string Name; 
    public string Location; 
} 

通过使用实体框架我找回测试对象这我直接设置到我的列表框的集合查询的结果。但使用DisplayMemberPath Iam只显示名称值。所以,现在列表框是持有整个测试对象的集合,但只显示名称值。

当我试图绑定到列表框的selecteditem Iam获取整个测试对象作为一个字符串,但我只需要名称值在selecteditem结果。

我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; 

在DataContext到其中将selectedItem被设定为被具有整个串的值表示测试对象,但我希望selecteditem在显示时返回Name值(因为我已将displaymemberpath设置为Name)而不是以字符串格式返回整个对象。

我该如何做到这一点?

+2

,你需要阅读有关[列表框]中的SelectedValue和SelectedValuePath性质(http://msdn.microsoft.com/ru-ru/library/system.windows.controls.listbox。 ASPX)。 – stukselbax

+0

@stukselbax,你需要发表评论作为答案。 –

回答

0

请使用在ListBox中IsSynchronizedWithCurrentItem财产和改变的SelectedItem在XAML代码绑定/名称如下:

<ListBox x:Name="lbSubSelector" Height="200" DisplayMemberPath="Name" SelectedItem="{Binding /Name, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True"/> 
0

,而不是使用列表框,我会使用带有GridColumns ListView的建议你。以下是代码片段,您可能需要相应地重新修改它。但是,这肯定会工作,你希望它的方式: -

<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>