myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und Silverlight » Datagridcell Wert übergeben und Spaltenindex oder Namen der Column ermitteln
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Datagridcell Wert übergeben und Spaltenindex oder Namen der Column ermitteln

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
RobAll RobAll ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.10.2017
Beiträge: 15
Entwicklungsumgebung: VisualStudio 2013
Herkunft: Süddeutschland


RobAll ist offline AIM Screenname von RobAll: Rob

Datagridcell Wert übergeben und Spaltenindex oder Namen der Column ermitteln

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, ich versuche seid dem Umstieg auf MVVM vergebens eine DataGridCelle zu manipulieren.
Ich muss der Celle einen Wert aus einem Nummerngenerator übergeben,
und vorab auch den Spaltenindex oder Namen der gewählten Column ermitteln




Mein Code: ähnlich
 https://social.msdn.microsoft.com/Forums...-cell?forum=wpf

XAML

XML-Code:
                    <DataGrid
..
                    DataContext="{StaticResource vm}"
                    Focusable="true"
                    SelectionUnit="Cell"
                    SelectionMode="Single"
                    CurrentCell ="{Binding CellInfo, Mode=TwoWay}"

XAML



Im MainViewModel

C#-Code:
private DataGridCellInfo _cellInfo;
        public DataGridCellInfo CellInfo
        {
            get { return _cellInfo; }
            set
            {
                _cellInfo = value;
                //OnPropertyChanged("CellInfo");
                //MessageBox.Show(string.Format("Column: {0}",
                //                _cellInfo.Column.DisplayIndex != null ? _cellInfo.Column.DisplayIndex.ToString() : "Index out of range!"));
            }
        }

Wer kann helfen, oder hat eine Idee ich kann weder get oder set Werte abrufen.
12.07.2019 23:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.057
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

In MVVM bindest Du gegen ein konkretes Objekt, zB. ein ViewModel oder ein spezifisches Modell.

Mir ist nicht ganz klar, was Du da ingesamt vor hast; aber statt der DataGridCellInfo würdest Du eben eine Collection zum Binden des Grids haben.
Und ein Objekt in der Collection hätte dann die Nummer enthalten.

Siehe dazu die Beispiele in  [Artikel] MVVM und DataBinding
13.07.2019 15:07 Beiträge des Benutzers | zu Buddylist hinzufügen
RobAll RobAll ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.10.2017
Beiträge: 15
Entwicklungsumgebung: VisualStudio 2013
Herkunft: Süddeutschland

Themenstarter Thema begonnen von RobAll

RobAll ist offline AIM Screenname von RobAll: Rob

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke für die Info.

Ich habe das DataGrid mit einer listcollectionview gebunden.

Über die Eigenschaft listcollectionview CurrentItem
werde ich den Wert manipulieren, funktioniert




Trotzdem benötige ich noch den ColumnHeader der DataGridSpalte.
Wie komme ich aus dem ViewModel da ran?
13.07.2019 17:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.057
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die View kennt das ViewModel; aber nicht umgekehrt.
Wenn Du im ViewModel etwas aus der View benötigst, dann hast Du einen kleinen Fehler im Konzept.
13.07.2019 17:58 Beiträge des Benutzers | zu Buddylist hinzufügen
RobAll RobAll ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.10.2017
Beiträge: 15
Entwicklungsumgebung: VisualStudio 2013
Herkunft: Süddeutschland

Themenstarter Thema begonnen von RobAll

RobAll ist offline AIM Screenname von RobAll: Rob

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Im DataGrid habe ich die Spalte Gerätenummer / Baugruppennummer / Einzelteilnummer,

je nach dem in welcher Spalte ich die Celle focusiere, soll der Nummerngenerator auf einen anderen Nummernkreis zugreifen, oder auch das Command deaktivieren.

Dazu benötige ich den Columnheader oder Index?

Wo ist da ein Konzeptfehler?

Im DataGrid gibt es die Eigenschaft CurrentColumn="" ,
kann ich die an das ViewModel binden.

Wie kann ich den DataGrid Spaltenindex / Spaltenheader binden,
hab da schon einiges getestet, die Werte waren immer null.




Danke vorab
13.07.2019 18:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.057
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn Du etwas aktiv aus der View laden musst, dann ist das ein Konzeptfehler.
Der Sinn und das Konzept sollte _immer_ sein, dass die View alle notwendigen Informationen aktiv bereit stellt.

Hier kannst Du im Prinzip den Index der selektierten Spalte / binden.
Damit hast Du dann im ViewModel die Information, was selektiert wurde - damit hast Du auch kein aktives "Holen von Informationen" und ist damit sauber.

Du kannst auch über den DisplayIndex über die Spalte der selektierten Zelle zugreifen; brauchst Du aber nicht, wenn Du mit Binding arbeitest (im Prinzip der Zugriff auf die DataGridCellInfo).
Aber damit hast Du eine Abhängigkeit im ViewModel.
13.07.2019 18:45 Beiträge des Benutzers | zu Buddylist hinzufügen
RobAll RobAll ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.10.2017
Beiträge: 15
Entwicklungsumgebung: VisualStudio 2013
Herkunft: Süddeutschland

Themenstarter Thema begonnen von RobAll

RobAll ist offline AIM Screenname von RobAll: Rob

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, ich möchte nach dem Command, sofort den neuen Value in der Zelle sehen.

1.
ich focusiere die DataGridZelle, und führe das Command aus.
Der neue Value wird erst visualisiert, wenn ich in DataGridCellEdit wechsel.

2.
Wechsel ich sofort in den DataGridCellEdit, und führe das Command aus,
wird der neue Value erst visualisiert, wenn ich in eine andere Zelle focusiere.


listcollectionview.refresh(); updatet, dauert aber zu lange.

Gibt es eine Möglichkeit nur das geänderte Objekt zu refreshen?

Oder gibt es über XAML DataGridCellEdit eine Möglichkeit?

Danke
30.07.2019 23:23 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
RobAll RobAll ist männlich
myCSharp.de-Mitglied

Dabei seit: 31.10.2017
Beiträge: 15
Entwicklungsumgebung: VisualStudio 2013
Herkunft: Süddeutschland

Themenstarter Thema begonnen von RobAll

RobAll ist offline AIM Screenname von RobAll: Rob

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Leider funktioniert

XML-Code:
Binding="{Binding Einzelteilnummer.Value, UpdateSourceTrigger=PropertyChanged}"

nicht.

Erst beim Click in eine andere Zelle(Lost Focus) aktualisiert die DataGridCell

Wer hat noch eine Idee?
01.08.2019 21:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
sytax
myCSharp.de-Mitglied

Dabei seit: 26.03.2019
Beiträge: 9


sytax ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

du solltest bei nutzung eines datagrids mit einer observablecollection arbeiten anstatt einer liste.

eine observablecollection hat den vorteil das, dass view sich sofort ändert sobald sich ein wert in der collection ändert. eine liste besitzt diese eigenschaft oder besser gesagt dieses event nicht.

am besten nochmal etwas über MVVM recherchieren.

gruß
23.08.2019 13:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Monate.
Der letzte Beitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 16.10.2019 01:26