绑定到ItemsSource中的属性

时间:2011-11-14 04:26:29

标签: c# wpf silverlight xaml

我的课程如下:

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)而不是以字符串格式返回整个对象。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

使用以下内容:

<ListBox x:Name="lbSubSelector" Height="200" DisplayMemberPath="Name" SelectedValuePath="@Name" />

然后您可以使用 lbSubSelector.SelectedValue 来获取所选项目的Name属性。

请参阅: http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.selectedvaluepath.aspx

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