Ответы пользователя по тегу WPF
  • Dependecy Property в WPF?

    Nipheris
    @Nipheris Куратор тега C#
    Основная идея стара как само программирование - поставить одни значения в зависимость от других. Система свойств зависимостей - это вариант реализации реактивного программирования.
    Вот Эксель видели когда-нибудь? А формулами пользовались? При изменении значений в ячейках-источниках значения в ячейке с формулой автоматически пересчитывается. Вот это примерно то же самое.
    Ответ написан
    3 комментария
  • Как стать профессиональным разработчиком 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-ом и отдайте либе.
    Ответ написан
    Комментировать