2011-09-21 75 views
10

我有一个列表框,多数民众赞成得到通过此查询绑定时TextName内容的变化:如何将listbox selecteditem内容绑定到文本框?

var players = 
    from p in context.Player 
    where p.GivenName.StartsWith(TextName.Text.Trim()) 
    select p; 

listNames.ItemsSource = players.ToList(); 

这表明,与文本框中的文本开始的球员的名字。现在,当我从列表框中点击任何项目(名称)时,我需要TextName显示在列表框中选择的玩家名称。我试图通过这种方式将其绑定:

<TextBox ... Text="{Binding Source=listNames, Path=SelectedItem.Content}" ... /> 

但是,当我点击一个ListBoxItem的,文本框只得到清除,并且不显示任何东西。我可能要设置文本框像我与列表框做设定时DisplayMemeberPath?我只需要一种方式绑定! 我能做什么?

回答

17

你有2个问题,你的绑定:

  1. 您正在使用Source属性,而不是的ElementName指定列表框名称
  2. 您试图绑定到您的Player对象上不存在的Content属性(我假设)。这是因为ListBoxSelectedItem属性的Player实例时指定的ItemsSource你有

为了解决这个问题,你应该改变你的绑定于以下内容:

<TextBox ... Text="{Binding ElementName=listNames, Path=SelectedItem.GivenName}" ... /> 
0

您应该使用RelativeSource访问列表框,如:

<TextBox ... Text="{Binding RelativeSource={RelativeSource 
         AncestorType={x:Type ListBox}}, Path=SelectedItem.Content}" .... /> 
1
<TextBox ... Text="{Binding ElementName=listNames, Path=SelectedItem.Name}" ... /> 

这将TextBox.Text绑定到ListBoxes - 名为listNames - SelectedItem,其中包含Player对象,并且您需要它的Name属性。

+0

啊,太慢:( –

0
 <Page 
     x:Class="Studentt1.MainPage" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="using:Studentt1" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      mc:Ignorable="d"> 

      <Grid Background="Wheat"> 
      <ListBox x:Name="listBox1" ItemsSource="{Binding StudentsList}" 
      SelectedItem="Binding SelectedStud,Mode=TwoWay}"   
      DisplayMemberPath="StudName"  
    HorizontalAlignment="Left" Height="332" Margin="59,173,0,0" VerticalAlignment="Top"                 
    <Button Content="Load" Command="{Binding LoadCommand}" HorizontalAlignment="Left" 
    Margin="144,567,0,0" VerticalAlignment="Top"/> 

      <Grid Background="Brown" HorizontalAlignment="Left" Height="352" 
      VerticalAlignment="Top" Width="633"> 
      <Grid.RowDefinitions> 
      <RowDefinition Height="50"/> 
      <RowDefinition Height="50"/> 
      <RowDefinition Height="50"/> 
      <RowDefinition Height="50"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="347"/> 
      <ColumnDefinition Width="401"/> 
      <ColumnDefinition Width="367*"/> 
      <ColumnDefinition Width="251*"/> 
     </Grid.ColumnDefinitions> 

     <TextBlock Grid.Row="0" FontSize="30" Grid.Column="0" Text="Registration 
     Number" HorizontalAlignment="Center" Margin="46,0,25,0" Width="276"/> 
     <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding 
     ElementName=listBox1,Path=SelectedItem.RegNo,Mode=TwoWay}"/> 
     <TextBlock Grid.Row="1" Grid.Column="0" FontSize="30" Text="Name" 
     HorizontalAlignment="Center" Margin="144,0,124,0" Width="79"/> 
     <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding 
     ElementName=listBox1,Path=SelectedItem.StudName,Mode=TwoWay}"/> 
     <TextBlock Grid.Row="2" Grid.Column="0" FontSize="30" Text="Age" 
     HorizontalAlignment="Center" Margin="157,0,137,0" Width="53"/> 
     <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding 
     ElementName=listBox1,Path=SelectedItem.Age,Mode=TwoWay}"/> 
     </Grid> 


     </Grid> 
     </Page> 

在这里,我绑定列表框,文本框的选择项..

你可以找到zip文件完整的源代码

+0

什么ZIP文件,你说关于? –