Выделите поисковый запрос в текстовом блоке - PullRequest
2 голосов
/ 22 ноября 2011

У меня есть текстовое поле поиска в приложении silverlight, в котором пользователь вводит текст в поисковом запросе, а результаты отображаются в текстовом блоке. Требуется, чтобы в текстовом блоке были выделены совпадения с поисковым запросом.

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

<TextBlock Text="{Binding Description}"/>

Это описание устанавливается в ViewModel

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Как уже упоминалось, это функциональность View, поэтому ее использование в коде Views приемлемо.

в вашем .xaml.cs

private void ButtonSearchRequest_Click(object sender, RoutedEventArgs e)
{
    Search(TextBoxToSearch, TextBoxSearchTerm.Text);
}

private void Search(TextBox tb, string strSearchTerm)
{
    strSearchTerm = strSearchTerm.Trim().ToLower();
    int iNextMatch = tb.Text.ToLower().IndexOf(strSearchTerm);

    if (iNextMatch >= 0)
    {
        tb.Focus();
        tb.CaretIndex = iNextMatch;
        tb.Select(iNextMatch, strSearchTerm.Length);
        tb.ScrollToLine(tb.GetLineIndexFromCharacterIndex(iNextMatch));
    }
 }
0 голосов
/ 30 ноября 2011

ОК, я понял, как это сделать в MVVM.

  1. Я использовал элемент управления RadRichTextBox от Telerik для достижения цели.

  2. Я создал новый класс со свойством зависимости как bindableXaml и методом, который преобразует строку в XAML (создал новый RadRichTextBox в коде, чтобы выделить работу в этом и возвратил результат как radDocument)

  3. Присоединяет его к RadRichTextBox, поэтому в ViewModel строка из БД преобразуется в желаемый формат XAML с помощью метода StringToXaml.Вы можете достичь того же результата, используя RichTextBox, но созданный в нем XAML потребует StringBuilder и RegEx.Match() для выполнения выделенной работы.
...