ComboBoxで選択してTextBoxにテキストを入力すると、TextBoxに入力された文字列を含むIDまたはFirstNameまたはLastName(ComboBox Selectionに基づく)の目に見えるAutoSuggestionリストが必要です。このように、今はFirstNameに対してのみ機能します。ComboBoxでの選択に基づいてTextBlockをバインドする
何とか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;
}
}
はい、DataContextの代わりにTextをタイプしました。その動作はFirstNameのためだけです。 ComboBoxの選択に基づいてIDと姓にバインドしたい場合 – marinadra
@marinadra:ちょうどバインディングパスを 'Value'に変更し、' Items'Source'を 'Value'プロパティを持つ単純なオブジェクトのコレクションにしますLINQや匿名のオブジェクトを使用するなど)、提案リストだけでは完全なPersonは必要ないでしょうか? –
はい、これが解決策です。どうもありがとうございます。 – marinadra