Установить содержимое TextBlock с помощью привязанного свойства C # (WPF и Caliburn.Micro) - PullRequest
0 голосов
/ 27 сентября 2018

Если это поможет узнать, я использую 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

...