Если это поможет узнать, я использую Caliburn.Micro и выложил все, основываясь на требованиях инфраструктуры MVVM, насколько я их понимаю.
Вот соответствующий XAML ...
<ListView ItemsSource="{Binding ProductListBox}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding ProductID}"/>
<TextBlock Text="{Binding ProductDescription}"/>
<TextBlock Text="{Binding ProductDescriptionExtended}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Приведенное выше содержимое ListView создается динамически на основе содержимого ProductListBox, который находится внутри этого класса ...
public class MainViewModel : Screen
{
public List<ProductModel> ProductListBox { get; private set; }
public void GetProductsButton()
{
DBAccess db = new DBAccess();
ProductListBox = db.GetProducts(SearchTextBox);
NotifyOfPropertyChange(() => ProductListBox);
}
}
Этот список заполняется при нажатии кнопки, онвызывает запуск вышеуказанного метода GetProductsButton ().
Over в классе DBAccess, в методе GetProducts я хотел бы изменить формат текста в ProductListBox <>. ProductDescription.Это строка, но я рад изменить ее на любой тип, если это поможет делу!
Я хотел бы добиться такого изменения - просто (выделить) изменение цвета фона выделенного текста на основенайденные условия поиска, которые пользователь ввел, будут отображать связанный текстовый блок XAML.
Что я не могу понять, так это как выделить любой текст в это время с помощью C #, который затем будет отображаться чисто привязаннымКонтроль XAML ... Я смог сделать это только путем жесткого кодирования XAML, что не поможет в достижении моих целей.
В классе DBAccess и в методе GetPeoducts я пытался сделать это таким образом, чтобы это произошло ...
Я вставил в этот код ...
TextBlock textBlock1 = new TextBlock();
textBlock1.Inlines.Add(new Bold(new Run("TextBlock")));
textBlock1.Inlines.Add(new Run(" is designed to be "));
textBlock1.Inlines.Add(new Italic(new Run("lightweight")));
textBlock1.Inlines.Add(new Run(", and is geared specifically at integrating "));
textBlock1.Inlines.Add(new Italic(new Run("small")));
textBlock1.Inlines.Add(new Run(" portions of flow content into a UI."));
Что, хотя и не меняет цвет фона, приведет к тому, что если я смогу заставить его работать;)
Я думаю, что в каждом примере кода, который я цитировалвыше писатель всегда заканчивает этот код чем-то вроде этого ...
this.Content = textBlock1;
И примеры, которые я видел, также всегда наследуются от класса Window.Я не хочу делать это таким образом.Я хочу найти условия поиска, выделить данный текст и разрешить обновлению привязанного TextBlock на основе заполненного списка типа ProductModel.
Я попытался изменить тип ProductDescription на TextBlock и использовалприведенный выше код, позволяющий моему XAML оставаться связанным непосредственно с ним
т.е. ..
PM.ProductDescription = textBlock1;
В этом случае вообще не было вывода графического интерфейса для содержимого.
Я также попробовал прямое HTML-подобное форматирование в строковый тип
т.е. ..
PM.ProductDescription = "<bold>Hello World</bold>";
Это дает буквальный текстовый вывод <bold>Hello World</bold>
в элементе управления TextBlock.
Я также пытался изменить тип связывающего ключа с Text на другие вещи в надежде, что я смогу его решить, но безуспешно.
Буду признателен за любые идеи или помощь, спасибо!
Вот небольшая картина того, что бы я хотел, чтобы программа могла делать ..
![text formatted with highlighted text](https://i.stack.imgur.com/bVsdI.png)