当我在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;
}
}
答案 0 :(得分:0)
您没有约束Text
,因此不会显示任何内容
你只需要绑定DataContext
,如果没有与之相关的附加绑定,它就什么都不做。只需交换它(或添加Text="{Binding}"
,它将绑定到DataContext
FirstName
),如果你的逻辑是正确的,它应该可以工作。
(而不是清除并添加到Items
,您应该只设置ItemsSource
。listBoxSuggestion.ItemsSource = namelist;
)
编辑:为不同的建议设置绑定工作,将绑定路径更改为Value
,并使ItemsSource
成为Value
的一些简单对象的集合}属性(例如使用LINQ和匿名对象)。