Задать вопрос
Ответы пользователя по тегу WPF
  • Использовать ли UserControl в WPF MVVM?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    А в чем разница? Или куча отдельных классов для отдельных окон, такое же количество отдельных UserControl + один класс на одно общее модальное окно. Плюс в конструкторе этого окна будут загромождения в виде создания UserControl`ов в зависимости от передаваемых данных или параметров, или куча конструкторов, все просто когда окон штук 5, а когда их 20-30, то потом запутаться будет легко, а отдельные окна, с вменяемыми названиями (например ДействиеИмяСущностиОкно - AddCustomerWindow, EditProductWindow и тд, без перепутываний типа CustomerAddWindow и EditProductWindow), будет в дальнейшем проще сопровождать. При необходимости можно создать класс строитель, с отдельными методами для создания окон, сущностей и необходимых параметров.
    Ответ написан
    Комментировать
  • Как реализовать биндинг?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Никак, в WinForm биндингов нет как таковых. Перепишите с использованием NotifyIcon для WPF.

    www.codeproject.com/Articles/36468/WPF-NotifyIcon#...
    https://www.nuget.org/packages/Hardcodet.NotifyIco... ссылка на nuget package.
    www.hardcodet.net/projects/wpf-notifyicon основная страница проекта.
    Ответ написан
    Комментировать
  • Как правильно написать на MVVM?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Для начала, возьмите какой нибудь MVVM framework (SimpleMVVM, MVVMLight, у них есть куча примеров), делаем свой view, ViewModel. В этих фрейморках уже реализованы базовые классы для создания VM (реализован INotyfyPropertyChanged). В VM надо добавить необходимые свойства, с которыми будет привязка свойств элементов. Так же желательно сделать класс-сервис, который будет создавать по требованию модель, экземпляр класса прописать в App.Resources, и биндить необходимую VM сразу в Xalm, к DataContext="{Binding GroupsViewModel, Mode=OneWay, Source={StaticResource Locator}}">(у локатора есть свойство GroupsViewModel, в котором зоздается необходимый VM, передаются все параметры на сервисы (например работа с БД).

    создание и передача элементов, или работа с контролами напрямую, увеличивает связанность кода, и тд.

    те, например в вашем случае:

    locator.cs
    public class Locator
    {
      public MainViewModel MainVM 
      {
          get {return new MainViewModel(); }
      }
    }


    MainViewModel.cs
    public class MainViewModel : Notifier
        {
           MainViewModel ()
           {
           }
    
            string address;
            public string Address;
            {
                get { return address; }
                set { address = value; OnPropertyChanged("Address"); }
            }
    
            string someControlText;
            public string SomeControlText
            {
                get { return someControlText; }
                set { someControlText = value; OnPropertyChanged("SomeControlText"); }
            }
        }


    в App.xaml в ресурсы прописываем (естественно добавляем необходимые xmlns)
    <Locator x:Key="Locator"/>

    MainView.xaml
    <UserControl x:Class="GPClient.View.BrowserView" DataContext="{Binding MainViewModel, Source={StaticResource Locator}}">>
        <ChromiumWebBrowser Address="{Binding Path=Address, Mode=TwoWay}"/>
        <SomeControl Text="{Binding Path=SomeControlText, Mode=TwoWay}" />
      </UserControl>


    Все дело в Mode=TwoWay. если элемент сам устанавливает свойство, то оно автоматом обновляется в VM, и наоборот, те если вам надо перейти на адрес, в методе в VM пишем Address="http://перейди-на.сайт"; обращаемся к полю VM, а не к приватному члену, иначе не вызовется PropertyChanged, с SomeText, так же.
    Если у нас есть TextBox, то привязка таким образом позволяет получать введенное в него значение.

    для привязки методов, и событий, используются Command и триггеры в XAML.

    У вас тут немного спутано понятие ViewModel и Model. В VM прописываются, свойства, к которым будет привязка элементов View, а Model, это данные с которыми мы работаем, например модель БД, классы в которые сериализуется XML.

    Скачайте MVVMLight, SimpleMVVM, это простые фреймворки, с хорошими примерами и легковесные.
    Ответ написан
    2 комментария
  • Как получить значение из datagrid в WPF?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    во первых достаточно будет

    int selected = ((Book)BookDG.SelectedItem)
    context.Book.Remove(selectedBook);
    context.SaveChanges();

    MVVM и привязки вам помогут, достаточно сделать модель, в ней свойство, например, Selected, а в DataGrid написать, SelectedItem={Binding Selected, Mode=TwoWay}

    и можно писать

    context.Book.Remove(Selected);
    context.SaveChanges();

    Рекомендую SimpleMVVM, простой, для небольших проектов
    Ответ написан
    Комментировать
  • Как правильно сделать валидацию в DataGrid?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    в модели у полей есть атрибуты валидации?
    Ответ написан
    Комментировать
  • Как записать данные из DataSet в TextBox (WPF, SQL Server, Visual Studio)?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    1drv.ms/1K94o5k

    Вот вам пример
    Ответ написан
    Комментировать
  • Как прописать команды на кнопки для DataGrid в WPF?

    yarosroman
    @yarosroman
    C# the best
    Советую почитать про Entity Framework, DataBinding и MVVM.
    Ответ написан
    Комментировать
  • С сего начать изучение c# и wpf?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Язык программирования C# 5.0 и платформа .NET 4.5 Эндрю Троелсен эта книга поможет вам, для начала стоит изучить сам С#, потом уже стоит приступать к WPF, по XAML есть много книг. Так же потом стоит посмотреть, что такое MVVM, и как его реализовать, какие есть фреймворки для этого. Опять же разработка на WPF, WinRT, Silverlight основана на технологии XAML(отличия есть, но принципы разметки одни и те же). Освоив, что то одно, проще будет освоить и другие.

    Вот еще www.microsoftvirtualacademy.com, есть несколько курсов и по C# и XAML
    Ответ написан
    1 комментарий
  • Как определить что ViewModel была изменена из DataGrid?

    yarosroman
    @yarosroman
    C# the best
    подписаться на событие CollectionChanged коллекции, в параметрах события будете получать измененные объекты коллекции, делаем еще одну коллекцию, в которую сохраняем изменения, и при нажатии на кнопку, передаем изменения из этой коллекции.
    Ответ написан
    Комментировать
  • Как работает binding к свойству свойства зависимости?

    yarosroman
    @yarosroman
    C# the best
    INotyfyPropertyChanged, грубо говоря необходимо реализовать этот интерфейс в объекте привязки, при изменении свойств необходимо вызывать событие PropertyChangedEventHandler, которое уведомляет свойство, к которому идет привязка о изменении объекта привязки. DependencyProperty реализует этот интерфейс. Одним словом, если мы пишем так
    Ответ написан
    Комментировать
  • Как сделать Binding до Point X?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Никак, ибо привязку в XAML поддерживают только DependencyProperty, а тут это лишь простое свойство типа double. Про стрелочки, посмотрите стиль ComboBox, там стрелка рисуется при помощи Path, а у него есть уже ширина и высота, которые поддерживают привязку.
    Ответ написан
    Комментировать