Михаил Черномордиков Developer Evangelist, Microsoft Россия mikcher@microsoft.com http://blogs.msdn.com/mikcher http://www.remix.ru Работа с данными в Сети Сеть Трансфор -мация Получение и подготовка class Car { public string Image {get;set} public string Model {get;set] } http://www.remix.ru Получение и подготовка Сериализация WSDL/SOAP - Web Services serialization JSON - DataContractJSONSerializer XML Работа с XML XmlReader XmlWriter http://www.remix.ru Language INtegrated Query • Позволяет исполнять специальные запросы с проверкой синтаксиса, строгой типизацией и Intellisense • Работает на любом источнике на базе IEnumerable<T> • Поддерживает фильтрацию и сортировку данных в памяти • Унифицированный доступ к различным источникам • LINQ to XML • LINQ to JSON • LINQ to Objects http://www.remix.ru Инновации в языке Ссылка на локальный тип Выражения var contacts = запроса from c in customers where c.City == "Hove" select new { c.Name, c.Phone }; Лямбдавыражения var contacts = customers .Where(c => c.City == "Hove") .Select(c => new { c.Name, c.Phone }); Методы расширения Инициализаторы объектов Анонимные типы http://www.remix.ru Работа с данными через LINQ ParseUsingLinqToXml Связывание данных Двунаправленное связывание данных между элементами интерфейса и CLR-объектами (или коллекцией объектов) <TextBlock Text="{Binding Nasdaq.Points, Mode=OneWay}"/> Binding binding = new Binding("Nasdaq.Points"); binding.Mode = BindingMode.OneWay; TextBlock tb = new TextBlock(); tb.SetBinding(TextBlock.TextProperty, binding); http://www.remix.ru Связывание данных Связывание свойств одного объекта со свойствами другого объекта Свойство получателя должно быть DependencyProperty Свойство источника может быть любого типа Источник может быть коллекцией, если получатель поддерживает связывание со множеством Разметка {Binding} обеспечивает декларативную поддержку data binding Источники данных Можно связать интерфейс с любым публичным свойством CLR-объекта (public property) DataContext: свойство FrameworkElement, которое определяет источник данных для данного элемента и всех дочерних подэлементов в дереве Binding.Source: позволяет явно указывать источник данных для каждого связывания http://www.remix.ru Режимы связывания • One Way • Обновления в источнике данных отражаются в UI • DataSource реализует интерфейс INotifyPropertyChanged для уведомления • Two Way • Изменения в UI отражаются в бизнес-объекте http://www.remix.ru Data Templates – шаблоны данных class Car { string Image {get;set} string Model {get;set] } DataTemplate <DataTemplate x:Key="carTemplate"> <Border BorderBrush="Blue" BorderThickness="2" Background="LightGray" Margin="10" Padding="15,15,15,5"> <StackPanel> <Image HorizontalAlignment="Center" Source="{Binding Path=Image}" /> <Border HorizontalAlignment="Center" BorderBrush="Navy" Background="#DDF“ BorderThickness="1" Margin="10" Padding="3"> <TextBlock FontSize="18" TextContent="{Binding Path=Model}" /> </Border> </StackPanel> </Border> </DataTemplate> http://www.remix.ru Валидация Событие BindingValidationError Через исключения в Converter или сеттере свойств Включение Mode=TwoWay NotifyOnValidationError=true ValidatesOnExceptions=true http://www.remix.ru DataGrid Может быть связан с данными Поддержка скроллинга Модель полного выделения строки Текстовый столбец Шаблон столбца Поддержка скинов Возможность редактирования Автогенерация колонок Стили Детали строки Изменение размеров пользователем Столбец с checkbox Виртуализация строк Автомасштабирование Изменение порядка столбцов Сортировка несколькими столбцами «Замороженные» столбцы Фильтрация http://www.remix.ru DataGrid Конвертеры Реализуют интерфейс IValueConveter Могут быть использованы с {Binding ..} One Way или Two Way ○ Из источника = Convert ○ Из получателя = ConvertBack http://www.remix.ru Связывание с коллекциями Любой тип IEnumerable поддерживается Уведомления – для Two Way INotifyCollectionChanged ObservableCollection http://www.remix.ru Content Control Готовое место для шаблона данных Применение шаблона данных через ContentTemplate http://www.remix.ru Content Control Делаем «мегакнопку» ItemsControl Повторяет UI для каждого элемента данных Возможности настройки внешнего представления <ItemsControl x:Name="ItemsControl" ItemsSource="{Binding SearchItemCollection}” /> Основанный на формах класс для списочных элементов управления – например, ListBox http://www.remix.ru Михаил Черномордиков Developer Evangelist, Microsoft Россия mikcher@microsoft.com http://blogs.msdn.com/mikcher http://www.remix.ru