#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. Спасибо за ответ, но это пример, я хотел посмотреть, как лучше всего это сделать, когда данных много.