Измените данные перед вводом списка

#c# #wpf #data-binding

#c# #wpf #привязка данных

Вопрос:

У меня проблема, предположим, что список получает данные из базы данных, теперь, например, я хочу добавить символ к каждому свойству txt2, поэтому, если наши данные были «Test», то они отображают «Test2» На самом деле, данные должны быть явно изменены, прежде чем они попадут в список ящиков, каков наилучший способ обеспечить высокую скорость и производительность?

// в xml

 <ListBox x:Name="lb" >
<ListBox.item>
<TextBlock Text="{binding txt1}"/>
<TextBlock Text="{binding txt2}"/>
</ListBox.item>
 </ListBox> 
  

// в коде позади

 List<File> list;
list = db.Files.toList();

lb.ItemSource=list;
  

//файл класса

 public class File{
public string txt1;
public string txt2;
}
  

Комментарии:

1. Ваш File класс во всех отношениях сломан. Public должно быть public , и оба элемента не видны за пределами класса, поскольку модификатор по умолчанию для членов класса private .

Ответ №1:

Если вы хотите изменить каждое txt2 свойство на уровне представления, вам необходимо выполнить итерацию по всем объектам, которые вы получили от уровня доступа к данным, и установить все эти свойства.

Здесь нет волшебных трюков. В зависимости от количества элементов вы могли бы немного ускорить процесс, выполняя итерации параллельно:

 Parallel.ForEach(list, item => item.txt2 = "some new value...");
  

Вам нужно будет перебирать все элементы, так или иначе, если вы не примените виртуализацию пользовательского интерфейса и не измените Text свойство фактических TextBlock элементов, которые загружаются и повторно используются по требованию. Однако я бы не рекомендовал этот подход.

Ответ №2:

Если вы хотите добавить только «2» к своему txt1 , вам нужно изменить txt2 в файле класса:

 public string txt2 { get { return txt1   "2";} }
  

Итак, это будет работать, поскольку вы создали файл класса с помощью txt1 , а свойство txt2 принимает значение txt1 и добавляет ваше пользовательское значение «2».

Если вы хотите увеличить последнее число, которое txt1 может иметь значение 1, вам нужно подстроить его и увеличить на единицу.

Комментарии:

1. Спасибо за ответ, но это пример, я хотел посмотреть, как лучше всего это сделать, когда данных много.