簡體   English   中英

C#WPF AutoCompleteBox:如何以編程方式綁定文本

[英]C# WPF AutoCompleteBox: How to bind text programmatically

從XAML,我可以創建AutoCompleteBox的屬性並將其賦予值,但我想通過編程方式做到這一點。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace comboboxSuggestions
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            var mylist = new List<person>
                             {
                                 new person()
                                 {
                                     name = "vikas",
                                     lastName = "bansal"
                                 },
                                  new person()
                                 {
                                     name = "viksit",
                                     lastName = "bansal"
                                 },
                                  new person()
                                 {
                                     name = "sunil",
                                     lastName = "bansal"
                                 }
                             };

            autocompleteBox.ItemsSource = mylist;
            autocompleteBox.ValueMemberPath = "name";
            var binding = new System.Windows.Data.Binding("name")
            {
            };
            autocompleteBox.SetBinding(AutoCompleteBox.TextProperty, binding);
        }

        private void autocompleteBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (autocompleteBox.SelectedItem != null)
            {
                person s = autocompleteBox.SelectedItem as person;

                string lastName = s.lastName;
            }
        }
    }

    public class person
    {
        public string name { get; set; }
        public string lastName { get; set; }
    }


}

XAML文件

   <Controls:AutoCompleteBox Name="autocompleteBox" SelectionChanged="autocompleteBox_SelectionChanged"
                                      Height="30" Width="200" 
                                      />

結果

在此處輸入圖片說明

問題是您的ItemsSource是一個List<person> ,但是您沒有提供一個ItemTemplate來告訴AutoCompleteBox為每個person顯示什么。 當您看到“ comboboxSuggestions.person”時,這是因為默認的ItemTemplate只是在執行person.ToString()

解決方法如下:

首先,將fullname屬性添加到person ,如下所示:

public class person
{
    public string name { get; set; }
    public string lastname { get; set; }

    public string fullname => name + " " + lastname;
}

然后,在XAML中定義一個ItemTemplate ,如下所示:

<Controls:AutoCompleteBox Name="autocompleteBox"
                          SelectionChanged="autocompleteBox_SelectionChanged"
                          Height="30"
                          Width="200">
    <Controls:AutoCompleteBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding fullname}" />
        </DataTemplate>
    <Controls:AutoCompleteBox.ItemTemplate>
</Controls:AutoCompleteBox>

(很抱歉,如果有任何錯別字,我還沒有測試此代碼。)


編輯

為了避免在XAML中定義模板,您可以只為person覆蓋ToString()

public class person
{
    public string name { get; set; }
    public string lastname { get; set; }

    public override string ToString()
    {
        return name + " " + lastname;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM