https://docs.microsoft.com/en-us/windows/communitytoolkit/extensions/listviewbase
. В вышеприведенной статье рассказывается о вкусности WCT, которая позволяет динамически изменять Tamplate элемента, который собирается визуализироваться, этот конкретный пример является статически выраженным расширением, которое просто работает как прикрепленное свойство к просмотру списка и циклически перебирает два разных шаблона
Но вы можете легко расширить ListView в шаблонное управление и, следовательно, более легкий доступ к модели представления, в которой находится ваш источник предметов, с этого момента вы можете изменить
private static void ItemTemplateContainerContentChanging(Windows.UI.Xaml.Controls.ListViewBase sender, ContainerContentChangingEventArgs args)
, где происходит вся магия.
Обозначение для реализации
, если вы не знаете mvvm и связывание, забудьте о том, что вы когда-либо читали это, и изучайте его.
Все дочерние элементы управления, которые не имеют явно определенного контекста данных, наследуют своих родителей.
Вы сможете отобразить входящие элементы управления в вышеупомянутой функции, отслеживая входящие args.ItemIndex, а затем перекрестно проверяя его с помощью связанного источника (список наблюдаемых и т. Д.), Который размещен на основной текст данных.
Чтобы преобразовать это в шаблонный / настраиваемый элемент управления, вам придется в значительной степени создать собственную реализацию ListView, например, MyListview: ListView
Свойства зависимости должны Чтобы преобразовать их в обычные, просто введите «propdp» и дважды нажмите «Tab», чтобы открыть шаблон по умолчанию.
Вам все равно придется ссылаться на все различные DataTamplates из XAML, как это показано в приведенном ниже демонстрационном приложении.
Отрезать провисание, которое, например, для демонстрационного кода, направления растяжения и полос зебры не требуется.
это точное расположение фрагмента кода, о котором я говорил, чтобы проверить его в действии и поиграть с ним, загрузите «Windows Community Toolkit» из магазина, оно находится в разделе «Расширения».
Инициализация двойной скобки создает анонимный класс, производный от указанного класса (внешние скобки), и обеспечивает блок инициализации внутри этого класса (внутренние скобки). Например,
new ArrayList<Integer>() {{
add(1);
add(2);
}};
Обратите внимание, что эффект от использования этой инициализации двойной скобки заключается в том, что вы создаете анонимные внутренние классы. Созданный класс имеет неявный этот
указатель на окружающий внешний класс. Обычно это не проблема, но при некоторых обстоятельствах, например, при сериализации или сборе мусора, это может вызвать горе, и об этом стоит знать.
Первая фигурная скобка создает новый Анонимный класс, и второй набор фигурной скобки создает экземпляр инициализаторы как статический блок.
Как другие указали, не безопасно использовать.
Однако можно всегда использовать эту альтернативу для инициализации наборов.
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
List<String> list = List.of("A", "B", "C");
Похоже, это то же самое, что и с ключевым словом, столь популярным во flash- и vbscript. Это метод изменения того, что это
и ничего больше.
Это - среди прочего - ярлык для инициализации коллекций. Узнайте больше ...
Для забавного применения инициализации двойной скобки смотрите здесь Dwemthy's Array in Java.
Отрывок
private static class IndustrialRaverMonkey
extends Creature.Base {{
life = 46;
strength = 35;
charisma = 91;
weapon = 2;
}}
private static class DwarvenAngel
extends Creature.Base {{
life = 540;
strength = 6;
charisma = 144;
weapon = 50;
}}
А теперь приготовьтесь к BattleOfGrottoOfSausageSmells
и ... лохматый бекон!