• Насколько удобно использовать visual studio code для С# разработчика?

    @i_light
    Backend, XAML, crossplatform
    Для Linux есть кроссплатформенный Rider от Jetbrains. Я давно перешёл на него на всех платформах. Но учитывайте, что Win32-зависимый код не будет работать или будет работать частично (касается в основном Framework, Core и Standard поддерживаются из коробки).
    Ответ написан
    Комментировать
  • Как принято у программистов: использовать для переменной свойство или давать параметр в каждом методе?

    @i_light
    Backend, XAML, crossplatform
    Это вопрос концепции. Свойства класса, которые принадлежат семантически его объекту - делайте свойствами. Данные, не относящиеся к объекту - передавайте параметрами.

    Например, для теоретического класса "яблоко", свойства - "размер", "вес", "цвет" - принадлежат яблоку, делаем их свойствами класса. Для теоретического метода "разделить" в этом классе необходим параметр "количество частей" - понятное дело, что он не является свойством яблока.
    Ответ написан
    Комментировать
  • Как установить .NET Framework 3.5 на Windows 10?

    @i_light
    Backend, XAML, crossplatform
    Вставьте установочный диск Windows 10 или смонтируйте ISO. Запустите 'cmd' от администратора и введите команду:

    DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:БукваДиска:\sources\sxs


    (замените "БукваДиска" на букву Вашего установочного диска или виртуального дисковода)

    Вот и всё.
    Источник.
    Ответ написан
    Комментировать
  • Как осуществляется связь между ViewModel и Model в MVVM?

    @i_light
    Backend, XAML, crossplatform
    Модель в MVVM не должна содержать никаких данных. Данные нужны для отображения во View, соответственно они получаются и используются во ViewModel.

    Model представляет собой модель некой сущности (как правило таблицы БД) и должна состоять в основном из методов манипуляции данными.

    Например:
    UserModel - методы для создания, удаления, редактирования и получения одного или списка пользователей.
    UserViewModel - хранение списка пользователей, либо хранение данных полей пользователя, команды для получения данных из модели, в том числе здесь могут быть и автономно запускающиеся (например по таймеру).
    Ответ написан
    Комментировать
  • Возможно ли подобный SQL запрос преобразовать в LINQ?

    @i_light
    Backend, XAML, crossplatform
    Не очень понял конструкцию с whExp, вот мой вариант:

    string[] searchArray = {"WORD1","WORD2"};
    var vars = db.vars.Where(v =>  searchArray.Contains(v.word)).Select(v => v.id);
    
    var xrefs = dr.xref.Where(x => vars.Contains(x.wordid)).GroupBy(x => x.itemid)
        .Select(g => new
        {
            ItemId = g.Key,
            Score = g.Sum(s => s.weight),
            CountItemId = g.Count()
        })
        .OrderByDescending(r => r.CountItemId)
        .ThenByDescending(r => r.Score)
        .Take(20)
        .Select(o => o.ItemId);
    
    var items = db.Items.Where(i => xrefs.Contains(i.id));
    Ответ написан
  • MVVM с ним или без него?

    @i_light
    Backend, XAML, crossplatform
    Всегда использовать. Просто - всегда. WPF изначально разработан под связывание и нормальную архитектуру.

    То, что можно делать так же, как в WinForms, не говорит о том, что это стоит делать.

    Просто запомнить как мантру, создал проект - добавь референс на MVVM фреймворк, и работай. Фреймворк любой, например MVVMLight. Или Prism. Или свой велосипед (я так делаю), любой.
    Ответ написан
    Комментировать
  • Как задать Binding для PasswordBox?

    @i_light
    Backend, XAML, crossplatform
    Binding для PasswordBox не реализован вполне намеренно, чтобы не было так просто перехватить пароль, введённый в поле.

    В качестве стандартной и относительно безопасной практики, часто пользуюсь передачей PasswordBox-а в команду логина параметром.

    <TextBox Text="{Binding Login}" x:Name="TbxLogin" />
    <PasswordBox x:Name="PasswordBox" />
    <Button Content="Log in" Command="{Binding SigninCommand}"
    		CommandParameter="{Binding ElementName=PasswordBox}" IsDefault="True" />


    public ICommand SigninCommand { get; set; }
    private void Signin(object param)
    {
    	var passwordBox = param as PasswordBox;
    	if (passwordBox == null)
    		return;
    	var password = passwordBox.Password;
            ...
    }
    Ответ написан
    Комментировать
  • Как правильнее организовать соединение с базой данных?

    @i_light
    Backend, XAML, crossplatform
    Лучше всего - используйте фреймворк для работы с данными. Entity Framework или NHibernate, на выбор.
    Ответ написан
    Комментировать
  • Как работать с окнами в WPF/MVVM?

    @i_light
    Backend, XAML, crossplatform
    Не вижу проблемы, честно говоря. Если вью модель инициализируется во всех окнах одинаково, особенно если автоматически, то можно просто создавать окна и показывать. В зависимости от условий разные.

    Пример:

    Модель:

    namespace MyApp.MyNamespace.ViewModels
    {
    	public class MyWindowModel : INotifyPropertyChanged
    	{
    	   private object _foo;
    	   public object Foo
    	   {
    		  get { return _foo; }
    		  set { _foo = value; RaisePropertyChanged("Foo"); }
    	   }
    
    	...
    
    	}
    }


    Вьюшка:

    <Window x:Class="MyApp.MyNamespace.MyWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:viewModels="clr-namespace:MyApp.MyNamespace.ViewModels">
       <Window.DataContext>
          <viewModels:MyWindowModel x:Key="Model" />
       </Window.DataContext>
       <Grid>
          <TextBlock Text={Binding Foo} />
       </Grid>
    </Window>


    Вызывать можно так, например как вы говорите из окошка логина:
    ...
    // проверяем успешность логина
    if (!loginSuccess)
    	return;
    
    // если всё хорошо, то создаём новое окно
    var myWindow = new MyWindow();
    
    // если нужно - что-то делаем с моделью внутри окна
    var model = myWindow.DataContext as MyWindowModel;
    model.Foo = new object();
    
    // показываем новое окно
    myWindow.Show();
    
    // закрываем текущее окно логина
    var window = Application.Current.Windows[0];
    if (window != null)
    	window.Close();
    Ответ написан
  • Как отловить ошибку приведения даты в C#?

    @i_light
    Backend, XAML, crossplatform
    Ну, кроме того, что вы используете plain sql в коде в XXI веке, вместо того, чтобы использовать одну из замечательных ORM,

    вы забыли, что в таких операциях полезно в начало скрипта вставить SET DATEFORMAT

    Однако, я всё ещё настойчиво рекомендую использовать ORM. Entity Framework, NHibernate, или любой другой на ваш вкус.
    Ответ написан
    Комментировать
  • Какие есть библиотеки для работы с тачскрином для .NET?

    @i_light
    Backend, XAML, crossplatform
    Для windows 8 можно использовать modern приложения. Они также поддерживают тачскрин. К тому же их проще портировать для мобильных ОС.
    Ответ написан
    Комментировать
  • Что возвращать, Empty collection или null?

    @i_light
    Backend, XAML, crossplatform
    Лучше вернуть OperationResult в обоих случаях, например такой:

    public class OperationResult<T>
    {
         T Result { get; set; }
         string Message { get; set; }
         bool IsSuccessful { get; set; } // можно заменить на enum с бОльшим количеством вариантов
    }
    Ответ написан
    Комментировать
  • Как лучше хранить картинку?

    @i_light
    Backend, XAML, crossplatform
    Не вижу смысла сохранять результирующую картинку куда-либо, кроме как по запросу клиента. Чтобы её просто показать, достаточно хранить коллекцию ссылок на PNG-файлы (JPEG не поддерживает прозрачность) и накладывать их прямо в браузере друг на друга, поверх, не сводя в единое изображение.
    Плюсы:
    - картинки кэшируются
    - никакой нагрузки на сервер
    - никакой нагрузки на клиент
    Минусы:
    - картинка выдаётся не мгновенно, а загружаются все части по очереди.
    Ответ написан
    Комментировать
  • Как в wpf комбинировать несколько стилей по типу CSS?

    @i_light
    Backend, XAML, crossplatform
    В WPF это сделать невозможно, причина этому проста - свойство Style объектное и Style - объект. Он может только наследоваться (BasedOn) от другого, и всё.

    Можно попробовать использовать MultiBinding и в его конвертере перебирать все стили и добавлять их сеттеры в коллекцию сеттеров на выходе конвертера. Но надо понимать, что это во-первых довольно толстая операция, причём вызываться будет часто, и во-вторых надо обрабатывать ситуации, когда сеттеры конфликтуют.
    Ответ написан
    Комментировать
  • Где можно получить втыка за свой код и где подскажут как лучше сделать? И заодно поучится на ошибках других?

    @i_light
    Backend, XAML, crossplatform
    Говнокод.ру полагаю :)

    А если серьёзно, то мне помогли книжки по паттернам программирования и хорошему коду. Правда не сразу - года через три. Поначалу только мешали :)
    Ответ написан
  • Адекватная замена MacBook Pro 2014 - что купить?

    @i_light
    Backend, XAML, crossplatform
    Как опытный макбук-хэйтер, делюсь результатами своих поисков.
    HP Zbook 14 G2 L3Z53UT

    Характеристики:
    Intel Core-i7 5500
    16 Gb RAM (двумя планками, обе заменимы)
    AMD FirePro M4150 + Intel HD Graphics 5500
    SSD PCI-e Sandisk A110 256 Gb (скорость чтения/записи примерно 700/700 мб/с) в слоте M.2 2260
    Посадочное место под 2.5" HDD (У меня стоит Samsung SpinPoint 2 Тб)
    Экран 14" 1920*1080 IPS матовый (у модели L3Z54UT глянцевый сенсорный)
    Безопасность - сканер отпечатков, ридер смарт-карт, ридер NFC-карт, шифрование ФС..
    Порт для док-станции
    Порт для допольнительной батареи (плоская на дно ноутбука)
    Клавиатура островная с подсветкой и наиболее стандартной раскладкой из всех что я видел.
    4 USB
    DisplayPort (в продаже есть кабели DP-HDMI)
    VGA (без переходников)
    Ethernet (без переходников)
    Wi-Fi 802.11 AC

    Вес - 1, 8 кг.

    Плюс - разбирается без отвёртки, общемировая гарантия на железо 3 года, в комплекте Windows 7 и Windows 8.1 Pro с апгрейдом до Windows 10. Зарядное устройство на 65W, довольно компактное.

    Батарею держит часов 5 в обычном режиме, в экономном до 8-10.

    Из минусов - не знаю, продаётся ли такой в России, живу не в России и покупал на амазоне с заведомо только английской клавиатурой (печатаю вслепую, а когда смотрю, русские буквы только мешают).

    Собираюсь на днях сделать обзор на хабре :)

    Цена на амазоне $1600 (была). Не знаю какой конфигурации ваша прошка, в сравнимой стоила бы от $2000.
    Ответ написан
  • [C#, WPF] Как сделать подобный выплывающий список?

    @i_light
    Backend, XAML, crossplatform
    Вам нужен wpf accordion
    Ответ написан
    Комментировать
  • Как правильно "подписаться" на событие Completed у вложенных Storyboard?

    @i_light
    Backend, XAML, crossplatform
    Покажите код и можно будет придумать решение.
    Ответ написан
    Комментировать