ВПФ:Мягкое удаление и привязка?
-
22-09-2019 - |
Вопрос
У меня есть специальные объекты, реализующие INotifyProperyChanged, и теперь мне интересно, можно ли реализовать мягкое удаление, которое бы хорошо сочеталось с привязкой?Каждый объект будет иметь свойство IsDeleted, и если для этого свойства установлено значение true, оно не будет отображаться в графическом интерфейсе.Я думал о создании собственного расширения разметки, которое украсило бы класс Binding, но это не сработало, как ожидалось.Теперь я рассматриваю возможность использования MultiBinding с IsDeleted в качестве одного из связанных свойств, чтобы преобразователь мог определить, какой объект удален.Но это решение звучит довольно сложно и скучно.
Есть ли у кого-нибудь идеи, как реализовать мягкое удаление для привязки?
Решение
Вы можете связать видимость свойства UIElement со свойством IsDeleted вашего объекта, чтобы скрыть или показать элементы.
В качестве примера я использую TextBlock.В XAML вы можете написать
<TextBlock Text="IsDeleted" Visibility={Binding IsDeleted}/>
ПРИМЕЧАНИЕ:В приведенном выше примере TextBlock виден, если IsDeleted имеет значение true.Я бы определил положительное свойство объекта, например Exists.Таким образом, вам не нужно отрицать логическое значение или создавать свой собственный преобразователь.
В WPF есть встроенный преобразователь, который преобразует логическое значение в перечислимое значение видимости.
Другие советы
Другой способ реализовать обратимое удаление — поддерживать и предоставлять доступ к коллекции, содержащей только те элементы, которые не были удалены в вашей модели представления, в дополнение к коллекции всех элементов.Это имеет (на мой взгляд) очень большое достоинство, поскольку вашему взгляду вообще не нужно об этом думать.