Ответы пользователя по тегу WPF
  • Как стать профессиональным разработчиком WPF?

    Nipheris
    @Nipheris Куратор тега C#
    А у MVVM нет общих правил, каждый реализовывает его по-разному.

    Ну я б не говорил, что их прям нет. Есть привязки, есть INotifyPropertyChanged, есть рекомендации от MS. Да, вы правы в том смысле, что WPF это библиотека, но НЕ фреймворк для разработки, т.е. она не регламентирует структуру приложения.

    И у меня диссонанс — что сначала изучать, куда копать, что вообще делать, что стоит изучать, а что нет.

    Вот пару дней назад советовал книгу: Raffaele Garofalo, "Building Enterprise Applicatio... - если ничего не читали еще, начните с неё.

    И действительно хороших, многофункциональных и понятных проектов на WPF + MVVM я не видел.

    Неудивительно: WPF-приложения это обычно line-of-business, а это не open-source по определению.

    С чего начать изучение WPF?

    Убедитесь, что более-менее понимаете платформу .NET и ООП в ней, иначе будет тяжело.
    Вам надо будет разобраться:
    а) с системой зависимых свойств (dependency property);
    б) c MVVM и INotifyPropertyChanged;
    в) само собой с XAML и контролами, принципами написания своих контролов;
    г) со стилями и стилизацией;
    д) с системой команд (ICommand) и прочим.

    Нужны ли MVVM-фреймворки? Почему столько дискуссии возникает. Одни говорят да, другие — нет.

    Дискуссии возникают потому что а) некоторые вещи можно сделать разными способами; б) разработчики имеют дело с приложениями разного размера и сложности, но редко об этом задумываются в спорах; в) опытные разработчики нередко сами себя уже обеспечили нужным "библиотечным" пока разрабатывали приложения (ViewModelBase, хах :) ). Лучше пока разберитесь сами как что работает, потом поймете, какой фреймворк вам пригодится.

    Впоследствии еще советую познакомиться с IoC-контейнерами, если еще не пользовались. Это общий совет для крупных приложений, не только для WPF. Некоторые имеют спецальные интеграционные библиотеки для работы на пару с фреймворками, например Autofac: Prism.Autofac.
    Ответ написан
    1 комментарий
  • Как подключить к элементу управления источник данных находящейся в экземпляре класса, который в свою очередь находится в ObservableCollection?

    Nipheris
    @Nipheris Куратор тега C#
    При условии, что сама эта коллекция будет находится в экземпляре класса RemoteClientViewModel.

    Не совсем понял, почему вы называете это "коллекцией", по логике я бы там ожидал увидеть просто несколько обычных свойств, выставленных для вьюхи. Чтобы сделать привязки к этим свойствам, просто задайте нужный ItemTemplate.

    Кроме того, мне нужно чтобы при клике на элемент списка ListBox в ListView отображался соответствующий этому клиенту (т.е той ViewModel которая подключена к этому элементу) список файлов.

    Всё очень просто - сделайте в MainViewModel свойство SelectedЧТОТО, в пару к вашей коллекции. Например, если коллекция это RemoteClients, то и свойство - SelectedRemoteClient. Забиндите SelectedItem ListBox-а к этому свойству. Разумеется, не забудьте его правильно реализовать, с NotifyPropertyChanged. Затем привяжите ItemsSource ListView-хи к SelectedRemoteClient.Files, где Files это коллекция с информацией о файлах. Если не будет работать, пишите, попробуем другой вариант.
    Ответ написан
    7 комментариев
  • Из каких источников изучить c# wpf чтобы взаимодействовать с микроконтроллерам?

    Nipheris
    @Nipheris Куратор тега C#
    Сначала изучите C# и .net fw откуда угодно (1000 и 1 ответ на Тостере уже есть), чтобы не задавать такие вопросы.
    Очевидно же, что язык и даже платформа не имеет отношения к кокнретным интерфейсам. Тем более UI-подсистема.

    Вы как планируете управлять ими, через COM-порт?
    Ответ написан
    Комментировать
  • Как в Window динамически добавлять Pie Chart ( WPF C#)?

    Nipheris
    @Nipheris Куратор тега C#
    Добавлять созданием объекта чарта. Привязывать, например, биндингами, как в примере.

    Вы C# и WPF впервые видите?
    Ответ написан
    Комментировать
  • Как добавить действия обработчикам событий стандартных компонентов?

    Nipheris
    @Nipheris Куратор тега C#
    на изменение выделенного элемента

    Ежели так, то вам нужен TreeView и OnSelectedItemChanged.
    Ответ написан
    2 комментария
  • Как создать группу элементов в форме?

    Nipheris
    @Nipheris Куратор тега C#
    Читайте про UserControl в любой приличной книжке по WPF, судя по описанию вашей задачи это именно то, что нужно.
    Ответ написан
    Комментировать
  • Учебник по MVVM+WPF с примерами/заданиями?

    Nipheris
    @Nipheris Куратор тега C#
    Raffaele Garofalo, "Building Enterprise Applications with Windows Presentation Foundation and the Model View ViewModel Pattern"

    www.oreilly.com/pub/pr/2761
    Ответ написан
    Комментировать
  • Как отрисовать большое кол-во точек с помощью WPF 3D?

    Nipheris
    @Nipheris Куратор тега C#
    1) вы так легко считаете память, выделяемую под ваши кубы). Я думаю это весьма далеко от истины, т.к. лично я даже предположить не смогу, что конкретно происходит при создании дотнетовского объекта и сколько конкретно он потребует памяти;

    2) вы используете инструмент не по назначению. WPF - это для относительно малого числа граф. объектов (десятки, сотни) с высоким уровнем интерактивности для каждого из них. Иными словами - для интерфейсов. В интерфейсах есть небольшое количество высокоинтерактивных объектов - кнопок, скроллов, комбобоксов, и именно для таких сценариев WPF и оптимизирован. Вам с 10К кубами уже давно пора брать Direct3D и не мучаться. Это я вам не с потолка говорю, мы тоже когда-то пытались использовать WPF-шную двухмерную графику для двухмерной отрисовки, но быстро поняли, что его инфраструктура слишком тяжелая для нашей задачи. Вы замучаетесь в попытках это все оптимизировать.
    Ответ написан
    Комментировать
  • Как отобразить плоский список в виде дерева в DataGrid или TreeView(WPF, C#)?

    Nipheris
    @Nipheris Куратор тега C#
    <TreeView ItemsSource="{Binding СвойствоОбщейВьюМоделиСодержащееКоллекциюЗаписей}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding СвойствоОбъектаСсылающеесяНаОбъектРодитель}" DataType="{x:Type local:КлассОбъекта}">
                <TreeViewItem Header="{Binding СвойствоВОбъектеСТекстомДляОтображенияВУзле}"/>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

    Не забудьте добавить описание неймспейса local.
    Ответ написан
  • Как создавать кнопки связанные с объектами?

    Nipheris
    @Nipheris Куратор тега C#
    Начните с https://msdn.microsoft.com/en-us/magazine/dd419663.aspx .

    После прочтения статьи должны придти к выводу, что главное а) построить правильную ViewModel; б) записать правильные привязки. Не факт, что получится обойтись без генерации контролов из кода. Но даже в этом случае содержимое статьи должно быть применимо.
    Ответ написан
  • Как лучше привязать WCF приложение к проекту на WPF?

    Nipheris
    @Nipheris Куратор тега C#
    Правильно ли я сделал, что определение класса самого объекта из списка расположил в проекте wcf-сервиса? Класс списка со всеми операциями я расположил там же.

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

    сейчас я скопировал адрес из wcf-test-client и вставил как service reference в wpf

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

    Nipheris
    @Nipheris Куратор тега C#
    А в чем проблема-то? Если прога не работает - считать, что юзера нет за компом. Ну как трекер для того же Upwork-а работает.
    Это если цель - заставить юзера быть заинтересованным в генерации активности на компе. Если цель другая - см. ответ АртемЪ - он подходит, если вы администрируете машины пользователей. Если машины админятся самими юзерами (т.е. у вас не исключительных прав на них) - то тогда, имхо, и надежного метода нет по определению. Безопасная загрузка, загрузка с другого носителя, и т.д.
    Ответ написан
    1 комментарий
  • Для чего нужны свойства зависимости?

    Все предельно просто - dependency properties это попытка получить реактивное программирование конкретно в рамках WPF и с минимальными затратами (без модификаций на уровне языков/платформы .net).

    Вы формулами в Экселе когда-нибудь пользовались? Вида =A1+A2+A3? Когда обновляешь ячейку A1 и автоматически обновляются все значения, вычисляемые по формулам, в которых встречается A1. Вот это примерно то же самое. Почему это так важно в WPF? Потому что а) это естественный способ связи свойств визуальных компонент друг с другом и с ViewModel-ью - без свойств зависимостей обновление зависимых значений превращается в адские цепочки Refresh-ей, Recalc-ов и прочего, и дай бог не забыть вызвать все нужные пересчеты. б) это дает механизм абстрагированной обработки и изменения свойств объектов (как правило - контролов), более производительный и узкоспециализированный по сравнению со стандартной рефлексией. Это, в свою очередь, обеспечивает возможность без лишних заморочек написать классы вроде DoubleAnimation, с помощью которого можно анимировать ЛЮБОЕ (!) свойство типа double у любого объекта, лишь бы оно было dependency property.
    Ответ написан
    Комментировать
  • Какие технологии выбрать для создания кроссплатформенного файлового менеджера?

    Nipheris
    @Nipheris Куратор тега C#
    За JavaFX говорить не буду, вроде штука развивается, возможно наконец будет нормальная джава для десктопа; сравнивать не могу, не пользовался
    Также я видел что-то про Qt Quick и QML

    пожалуй это и стоит рассматривать для новых проектов.
    Сам я им не пользовался, но говорят, что WPF гораздо мощнее, чем Qt

    Раньше, когда появился - да, был значительно мощнее (до появления QML). Вообще был наверное самой продвинутой технологией для десктопа. Но уже 2015-й год, Qt Quick 2 и все такое, так что Qt и WPF уже вполне сравнимы.
    Если не ошибаюсь, то это совсем не кроссплатформенное решение

    Да, к сожалению. Поэтому вам резонно вернуться к рассмотрению Qt.
    рассказать про WPF что-то еще, я буду благодарен.

    дотнетовская технология, появилась в .net 3.0, использует direct3d для отрисовки, windows-only. Если нужны еще подробности - пишите в комментарии.
    то я больше склоняюсь к Qt, так как скорость работы всё же важнее скорости разработки

    хороший выбор для кроссплатформенного файлового менеджера, только замечу, что вы выбираете вы достаточно смело - в 95% случаев люди ищут либу к знакомому языку/платформе, т.к. обычно именно язык новый язык изучить не могут/не хотят. Если вы уверены, что C++ вы тянете, то тогда без вариантов - Qt.
    Ответ написан
    6 комментариев
  • Как получить доступ к MenuItem в ContextMenu?

    Nipheris
    @Nipheris Куратор тега C#
    В гугле не могу найти ничего кроме привязки данных, но в моем сценарии галка должна быть только на одном из 4 пунктов и я думал их переключать в коде, но не знаю как получить к ним доступ из кода.

    В codebehind конечно делать можно, но не нужно. Вы могли бы сделать нормальную viewmodel с четырьмя свойствами, соответствующими пунктам вашего меню и режимам, которые вы переключаете. После этого вы просто привязываете IsChecked каждого пункта меню к каждому свойству вьюмодели. А уже в ней вы реализуете логику, что если выбран один пункт, т.е. некоторое свойство из 4-х имеющихся проставлено в true, то вы снимаете true со всех остальных. Разумеется, чтобы привязка получила нужные уведомления, вы должны реализовать INotifyPropertyChanged.
    Если вышесказанное для вас туманно, то я могу посоветовать что почитать, т.к. ваше решение далековато от основных идей WPF и MVVM :)
    Ответ написан
    1 комментарий
  • Обновление wpf приложения?

    Nipheris
    @Nipheris Куратор тега C#
    MSI-пакеты тоже вариант, если проект большой и нужны широкие возможности.
    Ответ написан
    Комментировать
  • Актуален ли сейчас WPF?

    Nipheris
    @Nipheris Куратор тега C#
    разработка остановилась 5 лет назад и тому подобное

    Да, есть некоторый застой, основные силы переброшены на .net core и asp.net

    Правда ли, что WPF ждет судьба WinForms?

    Что конкретно вы имеете в виду под "судьбой WinForms"?

    Есть ли альтернатива WPF?

    Под .Net нету, под WinRT есть аналогичная подсистема, во многом скопированная с WPF, вообще под десктоп есть еще Qt, но это C++ (если не считать биндингов на другие языки)

    Что сейчас Microsoft предлагает для разработки GUI?

    Universal Windows Platform для Windows 10 - их основное направление, для классического десктопа - ничего нового.

    что WPF уходит в прошлое

    Альтернативы под .net нету, никуда он уходить не может (не все пока хотят связываться с Metro и UWP приложениями).
    Ответ написан
    Комментировать
  • Что использовать для написания приложения без многожества форм?

    Nipheris
    @Nipheris Куратор тега C#
    1) определитесь, что у вас будет базовым документом. Т.е., чего у вас будет много. Сейчас, я так понимаю, это заказ. Итак, это документ и он будет множиться. Советую его сделать табами.
    2) информационная панель и список пользователей вполне могут быть сделаны док-панелями справа и слева. Причина проста - на них придется часто смотреть, следить за ними. Постоянно переключаться не вариант. Правда, тогда они должны быть не так обильно наполнены элементами, как панель заказа, но мне кажется у вас как раз так и будет. Если у вас на инф. панели в основном сообщения, а на вкладке "список пользователей" - только этот список, ты выделять под такое весь экран нет смысла.

    Итого: слева инф. панель (15-20%), справа список пользователей (15%), оставшееся по центру - таб-контрол для заказов, по принципу табов в браузере (можно даже плюсик сделать для создания нового заказа). Альтернативный варинт - инф. панель снизу, под таб-контролом для заказов
    Ответ написан
    Комментировать
  • Воспроизведение музыки WPF?

    Nipheris
    @Nipheris Куратор тега C#
    Есть еще либа на свете - NAudio. Можно ей попробовать. Возможно, она сама не умеет качать по урлу, тогда скачайте сами WebClient-ом и отдайте либе.
    Ответ написан
    Комментировать
  • Использование Binding в WPF?

    Nipheris
    @Nipheris Куратор тега C#
    > При этом реализовать это без использования INotifyPropertyChanged.
    Вы хотя бы коротко причину указали, почему так нельзя делать. Почему меня интересует причина? Потому что если вы скажете "я не хочу забивать чистенькие модельные классы, которые используются в нескольких проектах всякими непонятными INotifyPropertyChanged" я вам отвечу "а и не нужно их трогать, для реализации INotifyPropertyChanged создаются ViewModel-объекты, которые и привязываются к контролам вместо модельных. Они и реализуют INPC, кроме того могут выставлять во вьюху некоторые свойства, которых нет в модельных объектах".
    А если вы скажете "я тут экспериментирую", то тогда можете запилить DependencyProperty у себя в привязываемом объекте, хотя это довольно странно. Но работать должно.
    Ответ написан
    Комментировать