Laden...

MVVM - Vorgehensweise: Abfrage einer ICollectionView, Eintragen in Model ...

Erstellt von echdeneth vor 4 Jahren Letzter Beitrag vor 4 Jahren 901 Views
echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren
MVVM - Vorgehensweise: Abfrage einer ICollectionView, Eintragen in Model ...

Ich habe ein Control in dem ein:
Datagrid (ICollectionView1 von ObservableCollection - in dieser Problematik irrelevant)
Textblock und co (Model) und ein
Button => DialogHost mit einer Artikelübersicht (ICollectionView2 von selbiger ObservableColl... + Filter) enthalten ist.

Nun wollte ich gerne das die Abfrage der CollectionView2, die Darstellung in Textblock und co und die Abfrage für ein SQl-Query über ein Model (ein und dasselbe) läuft. Aktuell mache ich das Altmodisch.

Der XAML für die ListView im DialogHost (für Abfrage der Auswahl)


                            <ListView x:Name="DH_List" Margin="4"
                                      ItemsSource="{Binding ArtikelView}">
                                <ListView.ItemTemplate>
                                    <DataTemplate>
                                        <DockPanel>
                                            <TextBlock Text="{Binding ID}" Width="30" Margin="4"/>
                                            <TextBlock Text="{Binding Name}" Margin="4"/>
                                        </DockPanel>
                                    </DataTemplate>
                                </ListView.ItemTemplate>
                            </ListView>

Aktuelle Abfrage:


        private void Btn_Artikelauswahl_Click(object sender, RoutedEventArgs e)
        {
            stackP.Visibility = Visibility.Visible;
            Eintrag item = (Eintrag)DH_List.SelectedItem;
            eintrag.ID = item.ID;
            eintrag.Artikelnummer = item.Artikelnummer;
            eintrag.Menge = item.Menge;
            eintrag.Datum = item.Datum;
            eintrag.Name = item.Name;

            //Tb_ID.Text = item.ID.ToString();
            //Tb_Artikelnummer.Text = item.Artikelnummer;
            //Tb_Menge.Text = item.Menge.ToString();
            //Tb_Datum.Text = item.Datum.ToString();
        }

Wie kann ich im CodeBehind das Model "ansprechen"? Oder wo liegt mein Denkfehler?
Ich mache das aktuell mit Element.Content = "BlaBla" weil ich gewisse Funktionen (SQL) nicht aus dem Codebehind rauskriege und daher verwendete Klassen in CodeBehind initialisieren muss.

ich bitte um Nachsicht falls mein Anliegen ungenügend dargelegt wurde. (Fragen!)

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

4.931 Beiträge seit 2008
vor 4 Jahren

Du solltest MVVM benutzen (anstatt CodeBehind), s.a. [Artikel] MVVM und DataBinding.
Und Datenbankabfragen (SQL) sollten in einer eigenen Datenzugriffsschicht erfolgen, s. [Artikel] Drei-Schichten-Architektur.

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 4 Jahren

Und Datenbankabfragen (SQL) sollten in einer eigenen Datenzugriffsschicht erfolgen...

Ja ich weiss, genau das krieg ich nicht hin - deswegen Klassen in CodeBehind und der ganze Ärger ...

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

16.806 Beiträge seit 2008
vor 4 Jahren

Dann versuch aber erst mal die Grundzüge zu lernen, dass Du es eben hinbekommst.

Das Problem ist, dass Du Dir mit dem Code Behind mehr Ärger einfängst, als Lösung schaffst 😃