У меня есть пакет данных, это тело состоит из байтового массива.Также мне нужно интерпретировать поля пакета в нескольких вариациях, но тело остается неизменным.Например: AA-BB-CC-DD-EE-FF - тело постоянного пакета.В первой интерпретации: AA-BB-CC - в качестве параметра 1 и DD-EE-FF - в качестве параметра 2. Во втором варианте: AA-BB - в качестве параметра 3, CC-DD - параметр 4 и EE-FF - параметр 5. И т. д.
Я вижу несколько вариантов реализациитакое поведение:
- В одном классе создайте все необходимые свойства (параметр 1 ... параметр 5), а в классе вызывающего проверьте флаг варианта.
- Создайте несколько производных классов, и каждый класс содержит только определенные свойства (параметры 1 и 2 в первом случае, параметры от 3 до 5 - во втором).
Теперь, чтобы показать пакеты в WPF, я использую 1-й вариант.У меня есть ListView и его стиль как GridView:
<ListView x:Name="lv" />
Когда мне нужно визуализировать пакеты в первой интерпретации:
lv.Style = CType(TryFindResource("packetsStyle_1"), Style)
packagesStyle_1 содержит столбцы "Параметр 1"и" Параметр 2 ".
Когда мне нужно визуализировать пакеты в другой интерпретации, я просто изменяю стиль ListView:
lv.Style = CType(TryFindResource("packetsStyle_2"), Style)
packagesStyle_2 содержит столбцы«Параметр 3», «Параметр 4» и «Параметр 5».
Этот вид реализации не является объектно-ориентированным, как я понимаю.Я хочу сделать это с ООП (вариант 2) - базовый класс пакета с общими свойствами и унаследованные классы с конкретными свойствами.Но как WPF способ обновить GUI в этом случае?Нужно ли создавать два объекта List (из PacketVar1) и List (из PacketVar2) и изменять источник и стиль элемента ListView?Но список пакетов достаточно велик и занимает много памяти.Или какая правильная реализация?