• Как загрузить UserControl при клике на элемент ListBox?

    Модель делает две вещи - хранит данные сущности (в свойствах) и обрабатывает эти данные сущности (методы для изменения данных, могут быть вызваны из других моделей).

    Вьюмодель подготавливает модель для показа через представление. В простых случаях модель может являться вьюмоделью. Обычно вьюмодель реализует INotifyPropertyChanged, а модели это не обязательно, но тоже можно. Например, класс из БД - модель. Её можно сразу показывать в представлении, но чаще делают вьюмодель, основанный на модели (но не наследующийся от неё), которая и реализует INotifyPropertyChanged. У меня обычно есть абстрактные классы BaseViewModel (с INotifyPropertyChanged) и BaseEntityViewModel со свойством IsChanged и с методами Add/Edit/Delete или Save.

    Представление (View, в файлах xaml) показывает либо представление сущности, либо представление одной страницы (или части страницы). Представление связывается с вьюмоделью с помощью биндингов.

    Файлы .xaml.cs (файлы поддержки xaml, они же code behind) предназначены для кода, отвечающего только представление. Обычно удобнее использовать биндинг для получения данных из вьюмодели, но иногда не получается, и тогда приходится делать код в .xaml.cs. Но я стараюсь оставлять эти файлы пустыми.

    Вьюмодель должна представлять из себя описание какой-то вещи, какой-то сущности. Для вас хорошо сделать вьюмодель DevViewModel (или DevVm), описывающий один элемент списка. В некоторых случаях нужна отдельная вьюмодель для списка (DevListModel ), но, я думаю, вам она не нужна. У вас уже есть вьюмодель окна MainWindowViewModel (можно писать компактнее MainWindowVm), в ней и находится список элементов.

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

    Кстати, MainWindowViewModel можно создать тоже через xaml:
    <Window ....
        xmlns:local="clr-namespace:MyApp"
        ....>
        <Window.DataContext>
            <local:MainWindowViewModel />
        </Window.DataContext>
        <Grid>
        </Grid>
    </Window>

    В таком случае в xaml студия будет подсказывать члены датаконтекста в биндингах.
  • В чем разница между переопределением (override), от перекрытия (new), наследуемого метода?

    Если хочется заглубиться в тему таблицы виртуальных методов, то можно посмотреть в классических книгах типа Рихтера, или в статье Структура экземпляров типов и VMT.
  • В чем проблема динамического подключения DLL?

    Проблема была в том, что вы не указали имя неймспейса?
    Потому что ваш первый вариант из вопроса работает правильно (у класса Program нет неймспейса)
  • В чем проблема динамического подключения DLL?

    Степан Гервик, я неправильно выразился, под фразой "только подключение сборки" я имел в виду, как раз динамическое подключение сборки, либо через Assembly.Load, либо AppDomain.Load()
  • В чем проблема динамического подключения DLL?

    если это плагин (который можно включить и выключить), то других вариантов нет, только подключение сборки.
  • Не появляется роутер в списке wifi-устройств. Как исправить?

    lexxpavlov
    @lexxpavlov Автор вопроса
    Sha644, похоже, проблема была с каналом, может, был перезагружен.
  • Не появляется роутер в списке wifi-устройств. Как исправить?

    lexxpavlov
    @lexxpavlov Автор вопроса
    Sha644, на других устройствах проблем нет, я думаю, всё-таки, проблема на ноуте, программная или аппаратная.
    Расстояние до роутера - 3-5 метров.
  • Как правильно "Собрать решение"?

    тут есть три варианта:
    1) вызывать пинг не один раз, а постоянно вызывать его по таймеру, но это худший вариант.
    2) пинг запускать бесконечно (ping -t) и периодически показывать строки из вывода программы на экран. Тогда не нужно ожидать окончания программы (не использовать procCommand.WaitForExit();), а периодически (в другом потоке) проверять, есть ли новые строчки в выводе.
    3) использовать шарповский пинг, а не вызывать системную утилиту. См. тут для примера. Но его тоже нужно вызывать периодически, и лучше - в другом потоке.
  • Как правильно "Собрать решение"?

    а, я понял. Переименуйте программу в другое название, пусть она будет ping1.exe.
    Ваша программа запускает команду "cmd.exe /c ping 192.168.1.6", а ping - это не системный виндовский пинг, а ваша программа, которая так же называется.

    Либо вызывайте конкретный пинг, который находится в c:\windows\system32:
    var system32Folder = Environment.GetFolderPath(Environment.SpecialFolder.System);
    ProcessStartInfo psiOpt = new ProcessStartInfo("cmd.exe", string.Format("/c {0}\\ping.exe 192.168.1.{1}", system32Folder , Pc))
  • Как назвать переменную?

    Vitaly, возможно, licensingType и лучше, чем licenseType, я не настолько знаю английский, чтобы уловить разницу.

    Jun06Man, делайте, как вам нравится, главное, чтобы потом было понятно, о чём это будет, понятно для другого разработчика и для вас-через-год. И подумайте, не появится ли в дальнейшем переменная для указания именно дистрибуции (с константами FROM_STORE и FROM_DISC).
  • Как правильно "Собрать решение"?

    Если C:\Users\...\bin\Debug скопировать на раб стол, то все ок.

    Покажите, какие файлы в этой папке.
    Я сделал проект, поставил ваш код, и у меня работает, когда копирую только файл .exe.

    у меня нет ни какой папки Release

    Нужно выбрать в списке, рядом с зелёной кнопкой запуска. Если нет, то откройте свойства проекта, и во вкладке Сборка (Build) можно выбрать конфигурацию. Эта конфигурация указывает, компилировать с отладочной информацией или нет, а так же, нужно ли оптимизировать код. Когда отправляете программу заказчику, лучше компилировать в релизной конфигурации, но для себя лучше разрабатывать в дебаге.
  • Как назвать переменную?

    Я соглашусь с коллегами, что дистрибуция, всё-таки, относится к способам получения программы у пользователя. Это может быть коробочное решение, диск, скачивание дистрибутива из интернет/торрента/или ещё, получение через стор. Когда-то были программы, дискеты с которой получали через почту, исходный код (или даже машинный код) программ печатались в журналах. Это дистрибуция.
    Distribution - the action of sharing something out among a number of recipients.

    Дистрибуция - действие для разделения чего-либо большому количеству получателей.


    Вы же сами показывали здесь, как гугл называет - Pricing & distribution. И там указаны настройки не только дистрибуции (какие страны и пр), а также тип и цену оплаты за продукт.

    Выше Vitaly предложил lisenceType, и это лучше, чем дистрибуция, но мне кажется, что лицензия, всё-таки, это про тип лицензии (freeware, пропиетарная, GPL, MIT и пр.), то есть, что пользователь может делать с программой. Хотя, варианты оплаты тоже могут быть частью лицензии. А может, и нет, в лицензии, а есть в договоре, например (и у разных клиентов могут быть разные договоры, но одинаковые лицензии).

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

    А тут как раз указаны варианты, как разработчик/издатель может получать деньги - оплата продукта, микротранзакции, реклама и пр. Напишите весь список, тогда, может, там будет что-то ещё, кроме монетизации.
  • Как полностью очистить массив?

    Список List использовать уже не вариант, очень много переписывать)

    Чтобы не было переписывания, хорошо в методы передавать интерфейсы, а не реализации (см. LSP из SOLID).
    public void Test(int[] arr); // сюда может прийти только массив
    public void Test(IEnumerable<int> list); // а сюда может прийти и массив, и список. Использовать его через foreach
    public void Test(ICollection<int> list); // а тут можно добавлять элементы,  есть свойство Count
  • Property и Fields?

    MishkaVNorky,
    оно уже автосвойство и потребляет память?

    Свойства не потребляют память. А вот поля потребляют. Просто при использовании автосвойства появляется переменная.
    class Test
    {
        private int a;
        private int b;
        public int A { get { return a; } }
        public int B { get { return b; } }
        public int Sum { get { return a + b; } }
        public int Auto { get; set; }
    }

    В этом классе три переменных - a и b, а также скрытая переменная для поддержания автосвойства Auto (с именем наподобие <Auto>k__BackingField). Количество свойств (как и методов) не увеличивают потребление памяти экземпляра класса. Просто нужно помнить, что при использовании автосвойства создаётся переменная.
  • Property и Fields?

    MishkaVNorky, автосвойство - это когда есть get;set; без тела методов, и тогда компилятор сам создаст переменную и укажет тривиальные методы геттера и сеттера. В интерфейсе вообще не указывается, каким свойством будет реализован интерфейс. В интерфейсе указывается, что должен быть геттер и/или сеттер, а как будет сделано (обычным свойством или автосвойством), не важно. Например, интерфейс может быть реализован в разных классах, в одном будет автосвойство, а в другом - обычное свойство.

    На самом деле, автосвойство - это синтаксический сахар, просто меньше кода писать. До c#3.0 автосвойств не было, и либо приходилось самому создавать поля, либо использовать публичные переменные.
  • Что делать если приходится собирать требования и программировать одновременно?

    Посмотрите актуальную статью https://habr.com/post/433514/ (и комменты), много о чём рассказано, как (не) делать CRM.
  • Как сделать пропуск исключения при отладке?

    При появлении исключения в действиях есть ссылка для открытия настроек исключений. Там можно указывать студии, какие исключения ловить сразу же при появлении.
  • Как сделать пропуск исключения при отладке?

    Ну да, в одном проекте в настройках Exception стоит галочка ловить, а на другом нет. Наверное, автор вопроса про это и спрашивал.
  • Как сделать пропуск исключения при отладке?

    Хм, интересно, в одном проекте так, а в другом не так. Поисследую эту ситуацию.
  • Как сделать пропуск исключения при отладке?

    прямо так и делает.
    try {
        throw new Exception(); // 1
    } catch (Exception e) {
        Logger.Log(e.Message); // 2
    }

    Студия приостанавливает работу кода во время возникновения исключения. Если нажать F5, то код пойдёт к catch-у.
    Решение - как вы и сказали в ответе.