2012-01-06 17 views
0

ComboBoxで選択してTextBoxにテキストを入力すると、TextBoxに入力された文字列を含むIDまたはFirstNameまたはLastName(ComboBox Selectionに基づく)の目に見えるAutoSuggestionリストが必要です。このように、今はFirstNameに対してのみ機能します。ComboBoxでの選択に基づいてTextBlockをバインドする

何とかTextBlockの動的バインディングを設定するのに問題があります。 助けてください。 ありがとうございます!マリーナ

私はコンボボックスを持っている:

<ComboBox Height="23" Name="cbAttrib" Width="120" Margin="0,8,0,0"> 
      <ComboBoxItem>ID</ComboBoxItem> 
      <ComboBoxItem>FirstName</ComboBoxItem> 
      <ComboBoxItem>LastName</ComboBoxItem>    
    </ComboBox> 

私はテキストボックスを持っている:

<TextBox Name="txtSearch" TextChanged="txtAutoSuggestName_TextChanged"/> 

そして、このリストボックス:

<ListBox Name="listBoxSuggestion" Visibility="Hidden" SelectionChanged="ListBox_SelectionChanged"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock DataContext="{Binding FirstName}"/> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

とコードで、私は、このメソッドを持っています:

private void txtAutoSuggestName_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     listBoxSuggestion.Items.Clear(); 
     if (txtSearch.Text != "") 
     { 
      ComboBoxItem cb = (ComboBoxItem)cbAttrib.SelectedItem;     
      Collection<Person> namelist = proxy.PersonSearch(txtSearch.Text, cb.Content.ToString());    
      if (namelist.Count > 0) 
      {     
       listBoxSuggestion.Visibility = Visibility.Visible; 
       foreach (var obj in namelist) 
       { 
        listBoxSuggestion.Items.Add(obj);       
       } 
      } 
     } 
     else 
     { 
      listBoxSuggestion.Visibility = Visibility.Hidden; 
     } 
    } 

    private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (e.AddedItems.Count > 0) 
     { 
      txtSearch.Text = (e.AddedItems[0] as Person).FirstName.ToString(); 
      listBoxSuggestion.Visibility = System.Windows.Visibility.Hidden; 
     } 
    } 

答えて

0

あなたはTextはそう何もあなたはそれに関連します追加のバインディングが存在しない場合は何もしないDataContext、バインド

が表示されません結合されていません。ただそれを交換するか(またはFirstNameであるDataContextにバインドするText="{Binding}"を追加してください)、ロジックが正しい場合はうまくいくはずです。

編集(代わりに清算のとあなただけの代わりにItemsSourceを設定する必要がありItemsに追加listBoxSuggestion.ItemsSource = namelist;。):異なる提案のための結合作業をするためには、Valueへの結合パスを変更し、ItemsSourceを作りますValueプロパティを持つ単純なオブジェクトのコレクション(LINQや匿名オブジェクトの使用など)。

+0

はい、DataContextの代わりにTextをタイプしました。その動作はFirstNameのためだけです。 ComboBoxの選択に基づいてIDと姓にバインドしたい場合 – marinadra

+0

@marinadra:ちょうどバインディングパスを 'Value'に変更し、' Items'Source'を 'Value'プロパティを持つ単純なオブジェクトのコレクションにしますLINQや匿名のオブジェクトを使用するなど)、提案リストだけでは完全なPersonは必要ないでしょうか? –

+0

はい、これが解決策です。どうもありがとうございます。 – marinadra

関連する問題