May 11 2012

Инициализаторы объектов в блоке using

Источник http://sergeyteplyakov.blogspot.com/2012/05/using.html

Инициализаторы объектов (Object Initializers) – это полезная возможность языка C#, которая позволяет инициализировать необходимые свойства объекта прямо во время его создания. Поскольку синтаксически эта «фича» очень близка к инициализации объекта с передачей параметров через конструктор, многие разработчики начинают забивать на принципы ООП (в частности на понятие инварианта) и использовать ее, где только можно.

Но даже если не переходить к холиварам и малопонятным терминам, давайте рассмотрим небольшой пример, и подумаем над тем, может ли он привести к проблемам или нет:

 // position передается извне или настраиватся каким-то образом 
 long position = -1; 
 using (var file = newFileStream("d:\\1.txt", FileMode.Append)
 { 
 // Мы точно знаем, что нужные данные расположены 
 // с некоторым сдвигом!  Position = position 
 })
 { // Делаем чего-то с файлом }
 Read more »
Apr 02 2012

PleaseWaitService for WP7

Источник http://www.wp7rocks.com/2012/03/pleasewaitservice-for-wp7.html

BusyIndicator’ы используют все, поэтому PleaseWaitService может пригодится многим. Демонстрация работы:

Вам больше не нужно ставить прогресс бары на каждую страницу и использовать свойства IsBusy  в своей ViewModel. Для некоторых случаев такой подход вполне уместен.
Как использовать PleaseWaitService:

var service = new PleaseWaitService();
//operation started
service.Push();
//operation ended
service.Pop();

Очень удобно, когда вам нужно запустить несколько асинхронных операций.
Этот сервис, а также MVVM фреймворк Catel доступны здесь: http://catel.codeplex.com/

Mar 29 2012

Библиотека для регистрации и отлова нажатий ‘горячих’ комбинация клавиш (Global Key Hook)

Источник http://habrahabr.ru/post/140979/

Под комбинацией клавиш понимается любое количество одновременно нажатых клавиш, нажатых в любом порядке, которое может позволить ваша клавиатура. Для конечного пользователя, однако, не стоит превышать количество более пяти в одной комбинации, т.к. игровые клавиатуры есть не у всех.

Пример использования
HotKeysManager manager = new HotKeysManager(); manager.AddHotKey(new HotKeyCombination(() => { MessageBox.Show("Привет, Хабр!"); }) { Keys.LControlKey, Keys.H }); 

Другой вариант добавления, где в качестве комбинации берутся текущие нажатые клавиши, удобно в случае когда пользователь назначает комбинацию сам. В демке есть пример подобной записи комбинаций.

manager.AddHotKey(new HotKeyCombination(HookManager.CurrentDownedKeys.ToArray(), () => { MessageBox.Show("Привет, Хабр!"); })); 

Теперь при нажатии комбинации LeftCtrl+H (или H+LeftControl), мы увидим приветственное сообщение.

Read more »

Mar 29 2012

WPF: конвертеры как MarkupExtension

Источник http://habrahabr.ru/post/140876/

Конверторы являются одной из важнейшей особенностью механизма привязки в WPF. Они позволяют управлять тем, как источник привязки будет представлен в UI. В данной статье я покажу, как немного упростить использование конвертеров в XAML коде. Рассмотрим простейший пример:

internal class DateTimeToString : IValueConverter
{
public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
DateTime date = (DateTime)value;
return date.ToShortDateString();
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
    throw new NotSupportedException();
}
}

Read more »

Mar 28 2012

Применение атрибутов в C#

Источник http://habrahabr.ru/post/140842/

Большинство источников по использованию атрибутов [1, 2] рассказывают, что они есть, «обеспечивают эффективный способ связывания метаданных или декларативной информации с кодом», могут быть получены при помощи отражений [3].

В рамках данной статьи, я попробую показать прикладной пример применения атрибутов: проверка заполненности обязательных полей на форме добавления/редактирования нового бизнес-объекта.

Итак начнем. Как я уже привел чуть выше: «Атрибуты обеспечивают эффективный способ связывания метаданных или декларативной информации с кодом». Что же такое эти самые метаданные? В большинстве случаев, это просто дополнительная информация о классе, свойстве или методе, которая на работу класса, свойства или метода не влияет. Но вот внешние, по отношению к нему, объекты приложения эту информацию могут получать и как то обрабатывать.

Одним из ярких примеров применения атрибутов может служить атрибут NonSerializedAttribute [4]. Данным атрибутом вы можете пометить поле своего класса и оно будет работать абсолютно так же, как и до пометки. Но если вы решите воспользоваться сериализатором уже имеющимся в инфраструктуре .Net, то данное поле в выходную последовательность не попадет. Ладно, про атрибуты чуть рассказал, по ссылкам кто хотел почитал, давайте собственно перейдем к примеру.

Read more »

Mar 22 2012

Pushpin Clustering with the Windows Phone 7 Bing Map control

Source http://www.scottlogic.co.uk/blog/colin/2011/11/pushpin-clustering-with-the-windows-phone-7-bing-map-control/

This blog post provides a simple utility class that will cluster pushpins on a Bing Map control. This utility provides a way to achieve great performance with 1000s of pushpins.

The Bing Map control for Windows Phone 7 is a versatile control, allowing you to provide your users with an interactive map. The control has some very useful features such as Pushpins, which you can anchor to a map coordinate so that they move automatically as the user pans / zooms the map. However, I have found that in practice, if you have more than ~30 pushpins visible on a map, the pan / zoom performance starts to degrade (on a real device). Therefore, in order to provide the best user-experience, it is advisable to only render a handful of pushpins on the map at any one time.

This blog post describes a simple approach to clustering pushpins, as shown in the video below, which renders the location of ~500 juggling clubs worldwide:

The clustering code is very easy to use; just create a PushpinClusterer instance, pass your Pushpins, the map and the template to use for the clusters marker:

var clusterer = new PushpinClusterer(map, pins,
        this.Resources["ClusterTemplate"] as DataTemplate);

And that’s it!

Read more »

Feb 22 2012

Windows Phone 7 Icons

Download

Feb 10 2012

Использование NuGet. Создаем установочный пакет

Источник http://andrey.moveax.ru/post/tools-nuget-part3-creating-package.aspx

В прошлой части было рассмотрено как подключить к NuGet локальный репозиторий. Это удобное решение для установки библиотек собственной разработки. Осталось разобраться как создать свой пакет.

Для его создания потребуется утилита “NuGet.exe Command Line”, которую можно загрузить с официальной страницы проекта на CodePlex.Скопируем её в папку, доступную из командной строки. В качестве подходящего места может выступить “(Program files)\Microsoft Visual Studio 10.0\Common7\Tools\”.

Read more »

Feb 10 2012

Локальный репозиторий NuGet.

Источник http://andrey.moveax.ru/post/tools-nuget-part2-local-repository.aspx

Давайте откроем Visual Studio 2010 и посмотрим на настройки NuGet. Для этого можно или выбрать пункт меню “Tools > Library Package Manager > Package Manager Settings” или воспользоваться кнопкой “Package Manager Settings”, расположенной в окне консоли NuGet. Как можно заметить, в появившемся диалоге есть две страницы с настройками. Read more »

Feb 10 2012

Разворачиваем собсвенный NuGet.Server

Источник http://andrey.moveax.ru/post/nuget-creating-and-deploying-simple-server.aspx

Самый простой способ создать свой источник установочных пакетов NuGet – использовать общую папку. Как это сделать подробно описано в статье “Локальный репозиторий″. Однако это далеко не всегда лучший вариант. Например, если необходимо обеспечить доступ через интернет. Давайте рассмотрим как можно быстро развернуть свой NuGet-сервер.

Read more »

Alibi3col theme by Themocracy