2011-11-14 136 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>