#c# #.net-5
#c# #.net-5
Вопрос:
Допустим, у меня есть простой класс данных, который я использую для отправки данных через websocket:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public List<Person> Relatives { get; set; }
}
Я сериализуюсь в JSON для связи с websocket.
Теперь у меня есть графический интерфейс для визуализации всех данных в WPF, и я хочу использовать привязку данных и тот же класс Person для графического интерфейса, который я использую для передачи данных между клиентом и сервером, чтобы избавить себя от удвоения всего кода.
Обычно я бы просто реализовал INotifyPropertyChanged
свойства и использовал a ObservableCollection<Person>
вместо a List<Person>
. Но мне это кажется неправильным. Серверу не нужны INotifyPropertyChanged
ObservableCollection
служебные данные и. Но я также не хочу переписывать классы как BindablePerson .
Есть ли предпочтительный способ обойти эту проблему?
Комментарии:
1. Может быть, вы реализуете
INotifyPropertyChanged
с флагом включение / отключение событий повышения и включаете его только при переходе в пользовательский интерфейс?2. Это сработало бы для свойств, но как насчет
List<Person>
?3. Вы можете подкласс ObservableCollection из T и переопределить эти методы: защищенное переопределение void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { если (PreventEvents) возвращает; база. OnCollectionChanged(e); } защищенное переопределение аннулирует OnPropertyChanged(PropertyChangedEventArgs e) { если (PreventEvents) возвращает; база. OnPropertyChanged(e); }
4. Но это все равно не дает такой же функциональности, как List<T> . И кажется, что должен быть более простой способ, я не могу быть единственным, кто сталкивается с этой проблемой? Я думаю, я бы предпочел создать BindablePerson, чем переопределять ObservableCollection.
5. Выбор наилучшего способа работы с коллекциями полностью зависит от вас, это зависит от многих факторов в вашей архитектуре. Удачи с реализацией.