Ответы пользователя по тегу C#
  • Как правильно написать на 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 комментария
  • Почему в C# не получается обратиться к ToolStripProgressBar из потока?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    StatusBarProgress.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(()=>StatusBarProgress.Value = e.ProgressPercentage))
    Ответ написан
    3 комментария
  • Как получить значение из 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
    в модели у полей есть атрибуты валидации?
    Ответ написан
    Комментировать
  • Как спроектировать БД на sql и С#-?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Три варианта
    1. WPF + EntityFramework + MS SQL (еще стоит прочитать про паттерн MVVM)
    2. WPF + WCF сервис+ MSSql
    3. ADO.NET MVC

    1drv.ms/1K94o5k вот пример как работать с БД (WCF+EF)

    PS
    Базу данных вообще можно разместить в Azure
    Ответ написан
    1 комментарий
  • Как происходит портирование ASP.NET MVC приложения?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Для портирования нужено выделить сервис или сделать Web API, к которому будут обращаться клиенты, в asp все есть для этого или смотрите в сторону WCF.
    Ответ написан
    Комментировать
  • Windows Service или Application?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Если по графику, то приложение + планировщик.
    Ответ написан
    Комментировать
  • Какие сейчас актуальные книги по C#?

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

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

    Вот вам пример
    Ответ написан
    Комментировать
  • Литература для изучения C# с нуля?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Язык программирования C# 5.0 и платформа .NET 4.5 Эндрю Троелсен
    Ответ написан
    Комментировать
  • С сего начать изучение 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 комментарий
  • Как удалить элемент из ReadOnlyCollection?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Скопировать все элементы в другую коллекцию, удалить там, и вернуть опять в read only
    Ответ написан
    Комментировать
  • Как правильно передать данные между формами?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    Сделать класс-модель, и в форме два переделать конструктор, который принимает эту модель в качестве параметра, а в форме два, по событию от кнопки на форме два, заполнять модель, и далее после ShowDialog, смотреть результат диалога и уже заполнять вашу таблицу,

    например
    public clacc Model
    {
       string Name {get;set;}
       int Age {get; set;}
    }


    в AddFormWindow делаем так
    public class AddFormWindow 
    {
        private Model _model;
    
        public AddFormWindow(Model value) : base()
       {
            if (value!=null)
            {
                 _model=value;
            }
            else
                throw new ArgumentNullException("Can`t be NULL");
       }
    
        public void addFormBtn_Click(object sender, EventArgs e)
        {
             _model.Name=NameBox.Text;
            _model.Age=Int32.Parce(Agebox.Text);
        }
    }


    в коде вызова пишем
    Model model = new Model();
    addForm addFormWindow = new addForm(model);
    if (addFormWindow.ShowDialog()==DialogResult.OK)
    {
    //делаем тут необходимые манипуляции, все данные из формы находятся в model
    }


    естественно свойствам DialogResult кнопок на форме2 присваиваем необходимые значения DialogResult.Ok и DialogResult.Cancel

    В какой технологии написано все? для WinForms можно использовать паттерн MVP, для WCF (да и вообще XAML) лучше перейти на MVVM, тогда уберется взаимосвязанность объектов, появится возможность тестирования, повторность использования объектов.
    Ответ написан
  • Windows Universal app. Хранение интерфейса в БД и его динамическая загрузка во время выполнения, как?

    yarosroman
    @yarosroman Куратор тега C#
    C# the best
    XamlReader вам в помощь, у него есть метод Parse, из XAML в строке возвращает объект. Привязку событий к элементам в вашем Xaml нельзя использовать, придется в ручную обходить дерево и привязывать события.

    В своем проекте я делал разделение прав на основе поведений (Behaviors), сделал наследников от стандартного Behaviors(которые устанавливают свойства Visibilyty, Enabled), и в зависимости от роли пользователя, в XAML выглядит так

    <CheckBox IsChecked="{Binding Paid, Mode=TwoWay}">
              <i:Interaction.Behaviors>
                       <sb:EnabledBehavior IsEnabled="True" AuthService="{Binding Auth, Mode=OneWay, Source={StaticResource asp}}" UserRoles="EditEcoData,SetPaid" />
               </i:Interaction.Behaviors>
    </CheckBox>


    AuthService, класс в котором есть методы для определения прав.

    Те, если у пользователя есть роли необходимые, то checkbox будет активным, иначе нет.
    можно сделать, такое и на Visibilyty.
    Ответ написан
    Комментировать
  • Как сделать Binding до Point X?

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