Привязка TextBlock на основе выбора в ComboBox - PullRequest
0 голосов
/ 06 января 2012

Когда я делаю выделение в ComboBox, а затем набираю какой-то текст в TextBox, я хочу, чтобы в AutoSuggestion отображался список идентификатора или FirstName или LastName (на основе ComboBox Selection), который содержит напечатанную строку в TextBox.Таким образом, теперь это работает только для 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>

и в коде Iесть такие методы:

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 голосов
/ 06 января 2012

Вы не привязываете Text, поэтому ничего не будет отображаться

Вы просто привязываете DataContext, который ничего не делает, если нет дополнительных привязок, которые будут относиться к нему,Просто поменяйте местами (или добавьте Text="{Binding}", который будет привязан к DataContext, который является FirstName), и если ваша логика верна, она должна работать.

(вместо очистки и добавления кItems Вы должны просто установить вместо ItemsSource. listBoxSuggestion.ItemsSource = namelist;)

Редактировать: Чтобы привязка работала для разных предложений, измените путь привязки на Valueи сделайте ItemsSource коллекцией некоторых простых объектов со свойством Value (например, используйте LINQ и анонимные объекты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...