基于ComboBox中的选择绑定TextBlock

时间:2012-01-06 00:10:41

标签: wpf binding textblock autosuggest dynamically-generated

当我在ComboBox中进行选择,然后在TextBox中键入一些文本时,我希望在TextBox中包含ID或FirstName或LastName(基于ComboBox Selection)的可见AutoSuggestion列表,其中包含键入的字符串。像这样,现在它只适用于FirstName。

我有问题以某种方式为TextBlock设置动态绑定。 请帮忙。 提前致谢!码头

我有ComboBox:

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

我有TextBox:

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

这个ListBox:

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

1 个答案:

答案 0 :(得分:0)

您没有约束Text,因此不会显示任何内容

你只需要绑定DataContext,如果没有与之相关的附加绑定,它就什么都不做。只需交换它(或添加Text="{Binding}",它将绑定到DataContext FirstName),如果你的逻辑是正确的,它应该可以工作。

(而不是清除并添加到Items,您应该只设置ItemsSourcelistBoxSuggestion.ItemsSource = namelist;

编辑:为不同的建议设置绑定工作,将绑定路径更改为Value,并使ItemsSource成为Value的一些简单对象的集合}属性(例如使用LINQ和匿名对象)。