【问题标题】:Binding TextBlock based on selection in ComboBox基于 ComboBox 中的选择绑定 TextBlock
【发布时间】:2012-01-06 00:10:41
【问题描述】:

当我在 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;
        }
    }

【问题讨论】:

    标签: wpf binding textblock autosuggest dynamically-generated


    【解决方案1】:

    你没有绑定Text所以什么都不会显示

    您只需绑定DataContext,如果没有与它相关的其他绑定,它什么也不做。只需交换它(或添加Text="{Binding}",它将绑定到DataContext,即FirstName),如果您的逻辑正确,它应该可以工作。

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

    编辑:要使绑定适用于不同的建议,请将绑定路径更改为Value,并使ItemsSource 成为一些具有Value 属性的简单对象的集合(例如,使用LINQ和匿名对象)。

    【讨论】:

    • 是的,我已经输入了 Text 而不是 DataContext,它的工作原理,但仅适用于 FirstName。我希望它与 ID 和 LastName 绑定,基于 ComboBox 选择
    • @marinadra: 好吧,只需将绑定路径更改为Value 并使ItemsSource 成为一些具有Value 属性的简单对象的集合(例如,使用LINQ 和匿名对象),你可能不需要完整的 Person 仅用于建议列表,对吧?
    • 是的,这就是解决方案。非常感谢
    • @marinadra:如果现在这完全回答了您可以(并且应该)accept it.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    相关资源
    最近更新 更多