0

ComboBox で選択を行い、TextBox にテキストを入力すると、TextBox に入力された文字列を含む ID または FirstName または LastName (ComboBox の選択に基づく) の AutoSuggestion リストが表示されます。このように、FirstName に対してのみ機能するようになりました。

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;
        }
    }
4

1 に答える 1

0

をバインドしてTextいないため、何も表示されません

をバインドするだけでDataContext、それに関連する追加のバインディングがない場合は何もしません。それを交換するだけです(または、どちらがにバインドされるかを追加しText="{Binding}"ます)。ロジックが正しければ、動作するはずです。DataContextFirstName

(クリアして追加する代わりに、代わりにItemsを設定する必要がありますItemsSourcelistBoxSuggestion.ItemsSource = namelist;)

編集:さまざまな提案に対してバインディングを機能させるには、バインディング パスを変更し、プロパティを持ついくつかの単純なオブジェクトのコレクションをValue作成します (たとえば、LINQ と匿名オブジェクトを使用します)。ItemsSourceValue

于 2012-01-06T00:14:50.093 に答える