- PVSM.RU - https://www.pvsm.ru -
Кроме расширений [1] и множества других вещей [2], в Anniversary Update сильно расширили возможности компилируемых привязок (x:Bind). Давайте посмотрим, что изменилось.
Звездочкой (*) будут помечены возможности, требующие нового SDK.
Теперь вы можете использовать синтаксис вида {x:Bind Collection[0]}
, чтобы привязываться к определенным элементам списка. Более того, если исходный список реализует INotifyCollectionChanged, а Mode установлен в OneWay или TwoWay, привязка будет обновляться при изменении списка (даже если изменение не затрагивает привязанный элемент). Для использования этой возможности список должен реализовывать IList<T>
или IVector<T>
.
Такой синтаксис доступен не только для списков, но также для словарей и Map'ов — {x:Bind Dictionary['Key']}
. Правда типом ключа может быть только string. Аналогично спискам, словарь или Map может реализовывать IObservableMap для обновления привязок. Для экранирования кавычек в строке используется символ ^.
Появилась возможность привязываться к значениям Attached Properties. Например, {x:Bind MyButton.(Grid.Row)}
привяжется к номеру строки, в которой находится MyButton. Если Attached Property не объявлена в стандартном пространстве имен, вам нужно добавить соответствующий префикс с указанием нужного namespace.
В отличие от классического Binding, x:Bind строго типизирован, и невалидные привязки выдают ошибки в compile-time. Но бывает так, что вы привязываетесь к свойству с каким-то объявленным типом, но само свойство является объектом более конкретного типа. И даже если вы уверены, что член, которого нет в базовом типе, есть в его наследнике, просто так привязаться к этому члену вы не сможете. Для решения этой проблемы в 1607 добавили возможность кастинга — {x:Bind ((MyObject) Property).Member}
или {x:Bind Property.(MyObject.Member)}
(рекомендуется первый вариант). Это также бывает полезно для преобразования nullable в обычный тип (например, bool? -> bool).
Теперь не нужен. Булевые значения будут неявно конвертироваться в Visibility. Наконец-то.
Это, пожалуй, самая мощная новая возможность x:Bind. Теперь вы можете привязываться непосредственно к возвращаемым значениям функций. Например, {x:Bind MyNumber.ToString('F4')}
будет возвращать MyNumber с 4 знаками после запятой.
пространствоимен:Класс.Метод
.{x:Bind MyFunction(MyProperty), BindBack=Update}
Разумеется, есть ограничения:
Как мы видим, XAML, хоть и неспешно, но развивается, что очень радует. Вполне возможно, что в RS2 и RS3 тоже добавят что-нибудь новое. А пока можно потихоньку осваивать новые вещи и избавляться от ненужного теперь кода.
Автор: acedened
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/c-2/168312
Ссылки в тексте:
[1] расширений: https://habrahabr.ru/post/307116/
[2] других вещей: https://developer.microsoft.com/en-us/windows/windows-10-for-developers
[3] Источник: https://habrahabr.ru/post/307226/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.