INotifyCollectionChanged kłopot odświerzaniem binding

INotifyCollectionChanged kłopot odświerzaniem binding
MC
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • Postów:14
0

Witam problem jest w odświeżaniu kontrolki listview kontrolka jest zbindowana z listą obiektów, która ma zaimplementowaną klasę INotifyCollectionChanged. kontrolka nie jest odświeżana gdy zmieniam listę obiektów kod poniżej;

xaml

<Window x:Class="namiastka_crm.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:namiastka_crm"
Title="Namiastka CRM EA24" Height="485" Width="874" Loaded="Window_Loaded">
<DockPanel >
<Grid DockPanel.Dock="Top" Height="36">
<Menu HorizontalAlignment="Right" Height="36" VerticalAlignment="Top" Width="54">
<MenuItem x:Name="menuItem" Header="Opcje" Height="36" Width="54" RenderTransformOrigin="0.5,0.5">
<MenuItem.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</MenuItem.RenderTransform>
<MenuItem Header="Kontrahenci" ToolTip="Lista kontrahentów. Dodawanie, edytowanie i usuwanie konrtahentów" Click="MenuItem_Click" Height="26" Background="#FF89BCE6" BorderBrush="#FF89BCE6" Foreground="#FF740000">
<MenuItem.Icon>
<Image Source="image/plus.png" Width="auto" Height="auto" Margin="-3,0,-9,0"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Generuj nowy miesiąc" ToolTip="test" Click="MenuItem_Click_1" Height="26" Background="#FF89BCE6" BorderBrush="#FF89BCE6" Foreground="#FF740000">
<MenuItem.Icon>
<Image Source="image/plus.png" Width="auto" Height="auto" Margin="-3,0,-9,0"/>
</MenuItem.Icon>
</MenuItem>
</MenuItem>
</Menu>
<ComboBox Name="cmb_miesiac" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="120" SelectedValuePath="Tag" SelectedIndex="{Binding cmb_miesiac_index}" SelectionChanged="ComboBox_SelectionChanged">
<ComboBox.Items>
<ComboBoxItem Content="Styczeń" Tag="1"/>
<ComboBoxItem Content="Luty" Tag="2"/>
<ComboBoxItem Content="Marzec" Tag="3"/>
<ComboBoxItem Content="Kwiecień" Tag="4"/>
<ComboBoxItem Content="Maj" Tag="5"/>
<ComboBoxItem Content="Czerwiec" Tag="6"/>
</ComboBox.Items>
</ComboBox>
</Grid>
<Grid DockPanel.Dock="Bottom" Height="39" >
<ProgressBar HorizontalAlignment="Right" Height="19" Margin="723,10,0,0" VerticalAlignment="Top" Width="143"/>

    </Grid>
    <Grid DockPanel.Dock="Left" Width="150">
        <Label Content="Narzędzia" HorizontalAlignment="Left" Margin="50,0,0,0" VerticalAlignment="Top"/>
        <Button Content="co wybrales" HorizontalAlignment="Left" Margin="10,26,0,0" VerticalAlignment="Top" Width="130" Height="25" Click="Button_Click"/>

    </Grid>
    <Grid>
        <ListView Name="lvLista" ItemsSource="{Binding test}"  SelectedValue="{Binding wybraneid}" SelectedValuePath="id" SelectionMode="Single">
            <ListView.View >
                <GridView >
                    <GridViewColumn Header="Nazwa" Width="auto">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Label Content="{Binding nazwa}" ToolTip="{Binding data_rachunku}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Kod świad" Width="auto">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Label Content="{Binding kod_swiad}" ToolTip="{Binding kod_swiad}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Hasło" Width="auto">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Label Content="******" ToolTip="{Binding hasło}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Zakres" Width="auto">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Label Content="{Binding zakres}" ToolTip="{Binding data_rachunku}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="ile Rachunków" Width="auto">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Label Content="{Binding ile_rachunków, StringFormat=d, ConverterCulture=en-GB}" ToolTip="{Binding data_klient}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Kolejka statystyczna data" Width="auto">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Label Content="{Binding data_kolej_stat, StringFormat=d, ConverterCulture=en-GB}" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Kolejka statystyczna wysłana" Width="auto" >
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox IsChecked="{Binding kol_stat_czy_wyslana}" Unchecked="CheckBox_Unchecked" Checked="CheckBox_Checked"  />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Kolejka statystyczna potwierdzona" Width="auto">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox IsChecked="{Binding kol_stat_czy_zatwierdzona}" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>



</DockPanel>
</window>

cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace namiastka_crm
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public int rok {get; set; }
public int wybraneid {get;set;}
public int miesiac { get; set; }
public int cmb_miesiac_index { get; set; }
public List<lista> test { get; set; }

    public MainWindow()
    {
       miesiac= sys.aktualny_miesiąc();
       cmb_miesiac_index = miesiac - 1;
       rok = sys.aktualny_rok();
        this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
       
       this.DataContext = this;
       // lvLista.DataContext = test;
        InitializeComponent();
        
       
        
    }
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        
       // wyswietlanalista = admin.testowedane();
       
        
    }
    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        Kontrahenci n = new Kontrahenci();
        n.ShowDialog();
      

      
    }

    private void Label_MouseDown(object sender, MouseButtonEventArgs e)
    {
        MessageBox.Show(e.Timestamp.ToString());
    }

    private void MenuItem_Click_1(object sender, RoutedEventArgs e)
    {
        miesiac_rok page = new miesiac_rok();
        page.ShowDialog();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(wybraneid.ToString());
    }

    private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("nie zaznaczone");
    }

    private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("zaznaczone");
    }

    private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {


        miesiac = cmb_miesiac.SelectedIndex + 1;
        test = sys.listamiesiaca(miesiac, rok);

        
       // lvLista.ItemsSource = test;
       
    }


   
   


 
   
}

}

lista.cs

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace namiastka_crm
{
public class lista : INotifyCollectionChanged
{
private int ID;
public int id { get { return ID; }
set { if (ID != value)
{ ID = value;
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, id));}} }
private string Nazwa;
public string nazwa { get { return Nazwa; } set { if (value != Nazwa) { Nazwa = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, nazwa)); } } }
private string Kod_swiad;
public string kod_swiad { get { return Kod_swiad; } set { if (value != Kod_swiad) { Kod_swiad = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, kod_swiad)); } } }
private string Hasło;
public string hasło { get { return Hasło; } set { if (Hasło != value) { Hasło = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, hasło)); } } }
private string Zakres;
public string zakres { get { return Zakres; } set { if (Zakres != value) { Zakres = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, zakres)); } } }
private string Nr_rahunku;
public string nr_rahunku { get { return Nr_rahunku; } set { if (Nr_rahunku != value) { Nr_rahunku = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, nr_rahunku)); } } }
private DateTime Data_rachunku;
public DateTime data_rachunku { get { return Data_rachunku; } set { if (Data_rachunku != value) { Data_rachunku = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, data_rachunku)); } } }
private DateTime Data_klient;
public DateTime data_klient { get { return Data_klient; } set { if (Data_klient != value) { Data_klient = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, data_klient)); } } }
private DateTime Data_nfz;
public DateTime data_nfz { get { return Data_nfz; } set { if (Data_nfz != value) { Data_nfz = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, data_nfz)); } } }
private int Ile_rachunków;
public int ile_rachunków { get { return Ile_rachunków; } set { if (Ile_rachunków != value) { Ile_rachunków = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, ile_rachunków)); } } }
private DateTime Data_kolej_stat;
public DateTime data_kolej_stat { get { return Data_kolej_stat; } set { if (Data_kolej_stat != value) { Data_kolej_stat = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, data_kolej_stat)); } } }
private bool Kol_stat_czy_wyslana;
public bool kol_stat_czy_wyslana { get { return Kol_stat_czy_wyslana; } set { if (Kol_stat_czy_wyslana != value) { Kol_stat_czy_wyslana = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, kol_stat_czy_wyslana)); } } }
private bool Kol_stat_czy_zatwierdzona;
public bool kol_stat_czy_zatwierdzona { get { return Kol_stat_czy_zatwierdzona; } set { if (Kol_stat_czy_zatwierdzona != value) { Kol_stat_czy_zatwierdzona = value; OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, kol_stat_czy_zatwierdzona)); } } }

    //protected void NotifyPropertyChanged(string propertyName)
    //{
    //    if (PropertyChanged != null)
    //    {
    //        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    //    }
    //}
    //public event PropertyChangedEventHandler PropertyChanged;

    public event NotifyCollectionChangedEventHandler CollectionChanged;

    private void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
    {
        if (CollectionChanged != null)
        {
            CollectionChanged(this, e);
        }
    }

    
}

}

jeśli zna ktos jakis inny sposób na odświerzanie z bindigiem.
gdy zmieniam wartość w combo box to lv_list sie nie zmienia

FA
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 7 lat
  • Postów:475
0
  1. uzywac znacznikow kolorujacych skladnie
  2. polecam ObservableCollection<T>
T2
  • Rejestracja:ponad 10 lat
  • Ostatnio:8 miesięcy
  • Postów:194
0

Dlaczego tworzysz List<Lista> ? Nie rozumiem tego zabiegu.

Twoja klasa "Lista" powinna implementować INotifyPropertyChange a nie INotifyCollectionChanged jeżeli chcesz aby propertasy się aktualizowały

Klasyczna LIST-a z System.Collections.Generic nie implementuje interfejsu INotifyCollectionChanged. Tak jak kolega wyżej napisał, należy użyć ObservableCollection z System.Collections.ObjectModel.

MC
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • Postów:14
0

kombinowałem już z INotifyPropertyChanged ale nie wyszło.
przekształciłem na ObservableCollection ale dalej nie działa wszystko ładnie się ładuje ale po zmianie w Combo boxie miesiąca dalej się LvLista (ListView) nie odświeża chyba trzeba będzie w ogóle zrobić mvvm od początku do końca a nie kombinować
poniżej kod po przeróbce

cs

Kopiuj
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace namiastka_crm
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public int rok {get; set; }
        public int wybraneid {get;set;}
        public int miesiac { get; set; }
        public int cmb_miesiac_index { get; set; }
        public ObservableCollection<lista> test { get; set; }
       
        public MainWindow()
        {
           miesiac= sys.aktualny_miesiąc();
           cmb_miesiac_index = miesiac - 1;
           rok = sys.aktualny_rok();
            this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
           
           this.DataContext = this;
           // lvLista.DataContext = test;
            InitializeComponent();
            
           
            
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            
           // wyswietlanalista = admin.testowedane();
           
            
        }
        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            Kontrahenci n = new Kontrahenci();
            n.ShowDialog();
          

          
        }

        private void Label_MouseDown(object sender, MouseButtonEventArgs e)
        {
            MessageBox.Show(e.Timestamp.ToString());
        }

        private void MenuItem_Click_1(object sender, RoutedEventArgs e)
        {
            miesiac_rok page = new miesiac_rok();
            page.ShowDialog();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(wybraneid.ToString());
        }

        private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("nie zaznaczone");
        }

        private void CheckBox_Checked(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("zaznaczone");
        }

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {


            miesiac = cmb_miesiac.SelectedIndex + 1;
            test = sys.listamiesiaca(miesiac, rok);
          
                        
           // lvLista.ItemsSource = test;
           
        }


       
       


     
       
    }
}

i lista.cs

Kopiuj
 using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace namiastka_crm
{
    public class lista :  INotifyPropertyChanged
    {
       // public event PropertyChangedEventHandler PropertyChanged;

        private int ID;
        public int id { get { return ID; } set { if (ID != value)  { ID = value; NotifyPropertyChanged("id"); }} }
        private string Nazwa;
        public string nazwa { get { return Nazwa; } set { if (value != Nazwa) { Nazwa = value; NotifyPropertyChanged("nazwa"); } } }
        private string Kod_swiad;
        public string kod_swiad { get { return Kod_swiad; } set { if (value != Kod_swiad) { Kod_swiad = value; NotifyPropertyChanged("kod_swiad"); } } }
        private string Hasło;
        public string hasło { get { return Hasło; } set { if (Hasło != value) { Hasło = value; NotifyPropertyChanged("hasło"); } } }
        private string Zakres;
        public string zakres { get { return Zakres; } set { if (Zakres != value) { Zakres = value; NotifyPropertyChanged("zakres"); } } }
        private string Nr_rahunku;
        public string nr_rahunku { get { return Nr_rahunku; } set { if (Nr_rahunku != value) { Nr_rahunku = value; NotifyPropertyChanged("nr_rachunku"); } } }
        private DateTime Data_rachunku;
        public DateTime data_rachunku { get { return Data_rachunku; } set { if (Data_rachunku != value) { Data_rachunku = value; NotifyPropertyChanged("data_rachunku"); } } }
        private DateTime Data_klient;
        public DateTime data_klient { get { return Data_klient; } set { if (Data_klient != value) { Data_klient = value; NotifyPropertyChanged("data_klient"); } } }
        private DateTime Data_nfz;
        public DateTime data_nfz { get { return Data_nfz; } set { if (Data_nfz != value) { Data_nfz = value; NotifyPropertyChanged("data_nfz"); } } }
        private int Ile_rachunków;
        public int ile_rachunków { get { return Ile_rachunków; } set { if (Ile_rachunków != value) { Ile_rachunków = value; NotifyPropertyChanged("ile_rachunków"); } } }
        private DateTime Data_kolej_stat;
        public DateTime data_kolej_stat { get { return Data_kolej_stat; } set { if (Data_kolej_stat != value) { Data_kolej_stat = value; NotifyPropertyChanged("data_kolej_stat"); } } }
        private bool Kol_stat_czy_wyslana;
        public bool kol_stat_czy_wyslana { get { return Kol_stat_czy_wyslana; } set { if (Kol_stat_czy_wyslana != value) { Kol_stat_czy_wyslana = value; NotifyPropertyChanged("kol_stat_czy_wyslana"); } } }
        private bool Kol_stat_czy_zatwierdzona;
        public bool kol_stat_czy_zatwierdzona { get { return Kol_stat_czy_zatwierdzona; } set { if (Kol_stat_czy_zatwierdzona != value) { Kol_stat_czy_zatwierdzona = value; NotifyPropertyChanged("kol_stat_czy_zatwierdzona"); } } }



        protected void NotifyPropertyChanged(string propertyName)
        {
            //if (PropertyChanged != null)
            //{
            //    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            //}

            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;

        //public event NotifyCollectionChangedEventHandler CollectionChanged;

        //private void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
        //{
        //    if (CollectionChanged != null)
        //    {
        //        CollectionChanged(this, e);
        //    }
        //}

        
    }
   
}

proszę o wytknięcie mi błędów, może po prostu zle się do tego zabrałem i po prostu przebudować program.
zapomniałe dodać że dane wyciągam z mysql sys.listamiesiaca(int miesiac, int rok);

edytowany 1x, ostatnio: MCX
FA
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 7 lat
  • Postów:475
1
MCX napisał(a):

proszę o wytknięcie mi błędów, może po prostu zle się do tego zabrałem i po prostu przebudować program.
zapomniałe dodać że dane wyciągam z mysql sys.listamiesiaca(int miesiac, int rok);

To, skad wyciagasz dane jest nieistotne, mozesz je brac skądkolwiek i jak bindingi masz poprawne o powinno działać ok.

To, co koniecznie trzeba poprawic:

  • formatowanie kodu, bo jest tragiczne
  • wymyslenie sensownego modelu, pojedynczy objekt Twojej klasy lista faktycznie jest listą, czy elementem tej listy?
  • rozroznianie tego, kiedy zmienia sie kolekcja, od tego kiedy zmienia sie obiekt kolekcji i jeszcze to trzeba odroznic od tego, kiedy zmienia się property, w ktorym przechowujesz kolekcje (3 rozne przypadki - u Ciebie zachodzi ten 3)
  • radzilbym zrobienie jakiegos, nawet prostego, mvvma. Prosty viewModel, ladne modele, itd

Btw, z tego co piszesz, oczekujesz, ze po zmianie czegos na gui, uaktualni się obiekt "pod spodem", czyli chcesz, zeby update byl target->source. Zadeklarowales bindowanie jako TwoWay w xamlu?

</quote>
MC
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • Postów:14
0

FakeAccount masz całkowitą racje. Dziekuje wszystkim za pomoc wczoraj skończyłem wszystko pokładałem w mvvm i wszystko zaimplementowałem super działa i słuszna uwaga bindowanie TwoWay.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)