Заполнение AutoCompleteBox списком анонимных типов - PullRequest
3 голосов
/ 21 ноября 2011

Я делаю выбор пользователя userControl для моего проекта WPF C #. Я сделал пользовательский элемент управления автозаполнением для выбора, но в целях оптимизации я сейчас изучаю использование текстового поля Автозаполнение из WPF Toolkit.

Поскольку у меня есть тысячи пользователей в БД, я не хочу использовать пользовательские классы или многие другие в списках, которые я получаю. Так что с учетом этого здесь моя проблема.

var list = from cu in conn3.customer_users
select new  {
              username    =  cu.username,
             name        =  cu.fname.TrimEnd() + " " + cu.lname.TrimEnd()
                 // This would of course be built with more info from more entities. 

             };

            this.autoComplete.ItemsSource = list.ToList();

Теперь проблема в том, что он выводит следующий формат для поля результатов (при поиске).

{username = DEI1231, name = Missy Anderson}

Так что я не хочу просматривать список, а форматировать его, как я его связываю или как я делаю список.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

Окончательный выбор должен быть строкой, а не анонимным типом

 var str = from cu in x
           // your stuff
           select cu.username + cu.fname;

Другой вариант - сохранить анонимные типы и использовать StringFormat в привязке

<TextBlock >
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}  {1}">
            <Binding ElementName="username" Path="Text"/>
            <Binding ElementName="name" Path="Text"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

Еще один вариант - иметь поле анонимного типа, содержащее всю отображаемую строку, и использовать DisplayMemberPath для привязки

0 голосов
/ 25 ноября 2011

Я не хотел больше волноваться с начальным пробелом и, наконец, принял решение просто разрешить начальный пробел и в любом случае просто убрать все пробелы из строки мета.

Проблема на самом деле оказывается в том случае, если она сама по себе, так что это было решением для существа. Я не смотрю больше на это, так как вместо этого перехожу к мета с тегами внутри самого сообщения. И с префиксом. Например. @мета Посмотрим, как это работает;)

 private string metaInput { get; set; }
    public string MetaInput 
    {
        get
        {
            return metaInput;
        }

        set 
        {
            string x = value;
            if (x.Length > 3)
            {
                if (x.EndsWith(" "))
                {

                string z = x.Replace(" ", "");
                x = z.Replace(",", "");
                int l = x.Length;

                    if (l > 2)
                    {
                        metaInput = null;
                        SaveMetaWord(x);
                    }

                    else 
                    {
                        metaInput = null;
                    }
                }

            }

            else 
            {
                metaInput = value;
            }

        }
    }
...