• Как вызвать класс из другого проекта C#?

    mscrack
    @mscrack Автор вопроса
    Роман, модуль News реализует внутри себя всю логику, вывод списка новостей, чтение конкретной новости и тд..
    NewsModule
    -Models
    -Views
    -ViewModels
    public ObservableCollection<News> News { get; set; }


    работает внутри модуля News, то есть из основной программы я не должен иметь доступ к этой модели, что что я могу сделать из основной программы это вызов модуля. Если же я сделаю public модель News, то в основной программе я могу сделать что то типо
    var news = new News();
    news.Title = "fdsfs";

    и если через какое то время в модуле News изменится модель по какой то причине получится ошибка, так как поля Title может уже не быть.. поэтому я и думаю как ограничить доступ так, чтобы можно было вызвать этот модуль и не давать излишнего доступа к этому модулю.. нашел такую статью пока не знаю подойдет или нет, надо попробовать
  • Как вызвать класс из другого проекта C#?

    mscrack
    @mscrack Автор вопроса
    Василий Банников, Роман, меня вот что смущает, если я правильно понимаю. Допустим есть программа, назовем ее CoolProga, я добавляю в решение VS библиотеку классов, допустим News, далее в программе CoolPraga в MainWindow.xaml я пишу что то типа
    <ContentControl Content="{Binding ViewControl}" 
                            Grid.Row="2" 
                            Grid.ColumnSpan="2"/>

    сюда я планирую подгрузить MainNewsControl.xaml после того как пользователь выберет модуль News в меню.
    В MainWindowVM основной программы я пишу
    CurrentVM = new MainNewsControlVM();
          ViewControl = new MainNewsControl { DataContext = CurrentVM };

    В MainNewsControlVM есть список
    public ObservableCollection<News> News { get; set; }

    в таком варианте будет ошибка MainNewsControlVM нужно сделать public.Хорошо я сделал его паблик, теперь ошибка в модели News. Но если я сделаю модель News public, я смогу в основной программе взаимодействовать с этой моделью, чего быть не должно. Я думал может есть какой то вариант не делать эти методы public, возможно какую то прослойку между программой и модулем News. Или я не правильно что то делаю?
  • Как вызвать класс из другого проекта C#?

    mscrack
    @mscrack Автор вопроса
    Василий Банников, возможно мы по разному понимаем слово "Модуль". Попробую объяснить что я хотел попробовать.
    Суть в том что есть основная программа которая запускает подпрограммы (библиотеки dll), эти подпрограммы или библиотеки самостоятельны, там своя логика, модели, никак не связанные с основной программой. В основной программе есть меню, в этом меню я выбираю нужную мне подпрограмму и она загружается в ContentControl
  • Как вызвать класс из другого проекта C#?

    mscrack
    @mscrack Автор вопроса
    Василий Банников, просто если делать все как public в программе Test я могу использовать любой класс из модуля, что немного, как мне кажется, не правильно. Модуль вроде должен быть самостоятельной единицей, которая основная программа должна просто вызвать, а делаю все public можно наворотить такого, что модуль станет частью основной программы
  • Как вызвать класс из другого проекта C#?

    mscrack
    @mscrack Автор вопроса
    Василий Банников, там просто есть этот функционал, модули которые можно загрузить
  • Как вызвать класс из другого проекта C#?

    mscrack
    @mscrack Автор вопроса
    Василий Банников я просто думаю насколько такой подход правильный, может есть более оригинальный и правильный подход чем все классы public сделать
  • Как вызвать класс из другого проекта C#?

    mscrack
    @mscrack Автор вопроса
    да об объявлен как internal, но когда я объявляю его как public, эта ошибка появляется внутри модуля на списках List ругается на ModelName, и так на все классы.. я думал может есть какой то другой способ сделать это
  • Как правильно реализовать алгоритм?

    mscrack
    @mscrack Автор вопроса
    Все получилось, спасибо BasiC2k,
    Сделал так
    public double FindValue()
            {
                double step_100 == 100;
                double step_10 == 10;
                double step == 1;
                double X = 1;
                double n = 0.1;
    
                double stepX;
    
                double findValue = CalcValue(X);
                if (findValue > n)
                {
                           var (stepStart100, stepEnd100) = CalcX(X, 1500, step_100, n);
                            var (stepStart, stepEnd) = CalcX(stepStart100, stepEnd100, step_10, n);
                            (stepX, X) = CalcX(stepStart, stepEnd, step, n);
                }
                return X;
            }
    
            private (double, double) CalcX(double stepStart, double stepEnd, double step, double n)
            {
                bool stopCalc = false;
                double prevX = stepStart;
                while (stopCalc != true && stepStart <= stepEnd)
                {
                    double findValue = CalcValue(stepStart);
    
                    if (findValue >= n)
                    {
                        prevX = stepStart;
                        stepStart += step;
                    }
                    else
                        stopCalc = true;
                }
    
                return (prevX, stepStart);
            }
  • Как правильно реализовать алгоритм?

    mscrack
    @mscrack Автор вопроса
    BasiC2k, интересно, по описанию как раз то что я искал. Завтра попробую реализовать, спасибо.
  • Как правильно реализовать алгоритм?

    mscrack
    @mscrack Автор вопроса
    cicatrix, Алгоритм поиска значения X в диапазоне от 1 до 1500. В CalcValue функция которая зависит от Х, там все оптимизировано. Мне интересно есть ли какой то способ при нахождении Х идти не по 1 а по более быстрому алгоритму.
  • Как объединить два сериализованных файла?

    mscrack
    @mscrack Автор вопроса
    Мне не пришло почему то в голову создать 3 класс. Это куда проще чем то что я описал. Спасибо, решение оказалось простым, а я усложнил все
  • Как получить значение checkboxa из шаблона Listboxa?

    mscrack
    @mscrack Автор вопроса
    Space Purr, в листбокс вывелись значения из базы, в том числе и значение чекбокса IsCalc, я в листбоксе изменил значение чекбокса, например c выбранного на не выбранный, и новое значение должно было записаться в базу
  • Как записать этот код в php код?

    mscrack
    @mscrack
    dmitriyuvin,
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $d);
  • Как записать этот код в php код?

    mscrack
    @mscrack
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://cpay.tranzzo.com/api/v1/pos/${POS_ID}/orders/0");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    $headers = [
        'X-API-AUTH: CPAY ${API_KEY}:${API_SECRET}',
        'X-API-KEY: ${ENDPOINTS_KEY}'
    ];
    
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $server_output = curl_exec ($ch);
    curl_close ($ch);
  • Как загрузить UserControl при клике на элемент ListBox?

    mscrack
    @mscrack Автор вопроса
    Алексей Павлов, обратил внимание на то что не туда поставил TemplateSelector.
    Сделал так
    <Grid Grid.Row="2" Grid.Column="1" Margin="5">
                <StackPanel x:Name="panel2" ScrollViewer.VerticalScrollBarVisibility="Auto">
                    <ContentControl ContentTemplateSelector="{StaticResource Selector}"
                        Content="{Binding SelectedItem}"/>
    
                </StackPanel>
            </Grid>

    При клике на listbox загрузился UC там где и должен был быть, но грузится только один раз, при последующих кликах ничего не происходит. Теперь мне нужен список всех UC хранить, это по концепции MVVM я храню в UCMV а в TemplateSelector проверяю если ли такой UС или в MainWindowVM?
  • Как загрузить UserControl при клике на элемент ListBox?

    mscrack
    @mscrack Автор вопроса
    Алексей Павлов, попробовал сделать используя шаблоны DataTemplate но что то не вышло, в итоге решил попробовать ItemTemplateSelector.
    5ca5d26150a25849004057.jpeg

    Это мой UC. Который должен появляться при клике на элемент listboxa. Я реализовал класс DataTemplateSelector. Пока ничего особенного, но так как мне нужно чтобы при повторном клике открывался не новый UC а уже открытый, это как я понял как раз будет в DataTemplateSelector проверяться, но пока хочу просто вывести UC на то место которое для него предназначено
    class ItemTemplateSelector : DataTemplateSelector
        {
            public override DataTemplate SelectTemplate(object item, DependencyObject container)
            {
                FrameworkElement element = container as FrameworkElement;
                if (item != null)
                {
                       var window = Application.Current.MainWindow;
                        return
                            window.FindResource("uc1") as DataTemplate;
                }
    
                return null;
            }
        }


    Далее в MainWindow.xaml
    <Window.Resources>
            <local:ItemTemplateSelector x:Key="Selector" />
            <DataTemplate x:Key="uc1">
                <local:UserControl1 />
            </DataTemplate>
        </Window.Resources>
    
    //ниже в listbox добавил
    <ListBox ItemsSource="{Binding DevList}" Grid.Row="1" x:Name="device_list" ItemTemplateSelector="{StaticResource Selector}" />
    
    
    //далее
    <Grid Grid.Row="2" Grid.Column="1" Margin="5">
                <StackPanel x:Name="panel2">
                    <ContentControl  ContentTemplate="{StaticResource uc1}"/>
            // я думал что здесь появится UC но UC появляется в Listboxe
                </StackPanel>
            </Grid>
  • Как загрузить UserControl при клике на элемент ListBox?

    mscrack
    @mscrack Автор вопроса
    Алексей Павлов, получилось реализовать клик по элементу listboxa, теперь как я понял из MainWindowViewModel я должен показать usercontrol, в WinForms я делал так
    UserControl1 uc = new UserControl1();
    uc.Name = text.ToString();
    panel2.Children.Add(uc);

    Но сейчас так не прокатит. У меня есть StackPanel в которую подгружаются usercontrol
    <StackPanel x:Name="panel2" ScrollViewer.VerticalScrollBarVisibility="Auto">       
           <ContentControl Content="{Binding LoadControl}"/>             
    </StackPanel>

    LoadControl - биндинг который должен показывать UC

    private string selectedItem()
     {
                string item = this._selectedItem; 
    
                NotifyPropertyChanged("LoadControl");
    }
    
    public void LoadControl()
    {
    // тут логика загрузки
    }

    Правильно ли я понял, или за это должен отвечать UserControlVM и LoadControl нужно в нем реализовывать? По логике я же не достучусь до StackPanel.

    Не не так.
    MainWindowViewModel должна взаимодействовать с UserControlModel при каждом клике добавляя в список новый UC. F
    //UserControlModel
    List<string> usList = new List<string>();

    А UserControlVM видя что модель изменилась отображает текущий элемент
  • Как загрузить UserControl при клике на элемент ListBox?

    mscrack
    @mscrack Автор вопроса
    Алексей Павлов можно еще вопрос, по поводу концепции MVVM. Правильно ли я понял Model работает с данными, ViewModel берет эти данные и в зависимости от события что то с ними делает, а View это представление MainWindow.xaml, он общается с ViewModel через биндинги. То есть тот код который раньше был в MainWindow.xaml.cs теперь отдельно во ViewModel выносится. Касательно примера, если я хочу произвести манипуляции с DevList я должен создать модель DevListModel например и там манипулировать данными(например я захотел к имени индекс добавить text_0, text_1) или проверять если ли введенный элемент в списке, а моя ViewModel работает с теми данными что пришли из модели
  • Как получить значения DataGridView со всех форм?

    mscrack
    @mscrack Автор вопроса
    Foggy Finder, спасибо, буду разбираться. Вы очень помогли