Checkbox binding

  • WPF

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Checkbox binding

    Liebe User,

    ich hänge seit einiger Zeit an folgendem Problem...

    Ich habe mit WPF ein Fenster erzeugt, welches ein ListView-Element enthält. Jetzt habe ich eine Property-Klasse erstellt und die Properties wie folgt gefüllt

    VB.NET-Quellcode

    1. Private _strHausnummer As String
    2. Public Property Hausnummer() As String
    3. Get
    4. Return _strHausnummer
    5. End Get
    6. Set(ByVal value As String)
    7. _strHausnummer = value
    8. End Set
    9. End Property
    10. Private _strAktiv As Boolean
    11. Public Property Aktiv() As Boolean
    12. Get
    13. Return _strAktiv
    14. End Get
    15. Set(ByVal value As Boolean)
    16. _strAktiv = value
    17. End Set
    18. End Property


    Die Variablen wurden natürlich entsprechend deklariert...und funktionieren auch super...

    Dann habe ich das ganze per Code über eine Button-Click-Methode dem ListView hinzugefügt...

    VB.NET-Quellcode

    1. Public Sub OnClick(sender As Object, e As EventArgs)
    2. Dim gridView = TryCast(ItemsListView.View, GridView)
    3. Dim meinGridView As GridView
    4. Dim spalte As New GridViewColumn
    5. meinGridView = New GridView
    6. Me.ItemsListView.View = meinGridView
    7. AddCheck(meinGridView, "Aktiv")
    8. AddSpalte(meinGridView, "Aktiv")
    9. AddSpalte(meinGridView, "Nachname")


    AddCheck und AddSpalte sind zwei Methoden...

    die AddSpalte-Methode fügt mir Nachnamen und Vornamen sowie ein paar weitere Daten hinzu...

    die AddCheck beinhaltet mein Problem...Sie fügt eine Checkbox-Spalte ins ListView ein...das funktioniert auch gut...ich habe jetzt die Spalte mit den Checkboxen und darauf folgt eine Spalte mit der Checkbox-Eigenschaft (true/false)...Wenn ich die Checkbox auf true setz, ändert sich auch der Wert in dieser zweiten Spalte...

    jetzt wollte ich noch hinzufügen, dass wenn die jeweilige Checkbox aktiviert ist, dass dann die entsprechende Reihe rot/blau/sonstwie hinterlegt wird...aber ich hab keine Ahnung wie ich das bewerkstelligen kann...

    Die Checkbox-Methode ist

    VB.NET-Quellcode

    1. Public Function AddCheck(ByRef mGVt As GridView, ByVal strName As String) As Integer
    2. Dim column As GridViewColumn
    3. column = New GridViewColumn
    4. column.Header = strName
    5. Dim mData = New DataTemplate
    6. mData.DataType = GetType(CheckBox)
    7. Dim mFWF = New FrameworkElementFactory(GetType(CheckBox))
    8. Dim n = New System.Windows.Data.Binding(strName)
    9. n.Mode = BindingMode.TwoWay
    10. mFWF.SetBinding(CheckBox.IsCheckedProperty, n)
    11. 'If ???.IsChecked Then MessageBox.Show("Hallo") hier habe ich es versucht zu realisieren...aber ich weiß nicht weiter...
    12. mData.VisualTree = mFWF
    13. column.CellTemplate = mData
    14. mGVt.Columns.Add(column)
    15. End Function


    wäre schön wenn mir jemand auf die Sprünge helfen kann
    Erlerne mal das Konzept des MVVM-Patterns. Das ist bisserl mehr Stoff, aber guckma MVVM–Pattern (Josh Smiths Artikel)
    Und guck dir auch die Tuts der hiesigen Tipps & Tricks - Rubrik "Wpf" an.

    Niemals im Code neue Controls erstellen - sowas macht man im Xaml-Editor.
    Dort kannst du ein ListView aufs Window schmeissen, und ein Datatemplate für deine Datenklassen reinpacken, mit zB einer Checkbox drinne. Und dann das Listview an dein Viewmodel binden.
    Wie gesagt: Von Grund auf richtig lernen - es ist eine sehr ungewohnte, aber hocheffiziente Denkweise.

    "Niemals im Code neue Controls erstellen - sowas macht man im Xaml-Editor."

    Niemals auf die hören, die solch ultimative wahrheiten in den raum stellen.
    Andreas kühnel zeigt explicit auch diese varianten in seinen büchern

    Für deine Frage kommst du wahrscheinlich nicht mit behind code aus, es wird etwa in die richtung gehen:

    Im xaml code eine <Window.Resources> definieren
    diese haben immer einen "x: key = DeinControl"
    In dieser Windowsresourse legts du fest wie dein Control ausssehen soll


    Im codebehind kannst du diese dann auffrufen
    für dein DGV musst du das entsprechnede wählen, hier für diese Beispiels ist es Template
    Me.DeinControl.Template= (DataTemplate)FindResource("NameDenDugewählt hast im xaml code");
    Me.DeinControl.Entsprechendes = (DataTemplate)FindResource("NameDenDugewählt hast im xaml code");
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.
    naja - ich bleib aber dabei: Wpf-Visuals und Templates (ist ja viel mehr als nur Controls) sind dafür designed, in Xaml definiert zu werden, nicht in Code.
    Wer daran vorbei-programmiert, der programmiert am Kern-Konzept von Wpf vorbei, gewöhnt sich iwelchen Unfug an, und wird Wpf proggen nie richtig lernen können.
    Für extreme Sonderfälle mag ein erfahrener Wpf-Progger davon ausnahmsweise abweichen - aber nur aus Unkenntnis der Kernkonzepte so einzusteigen...
    Ganz genau. Das ist einfach nicht die Idee hinter WPF.

    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    ihr könnt ja dabei bleiben, aber ich tus nicht, ende
    JonDonym
    Eine Anonymisierung-Tool, das nicht nur deine IP verdeckt, sondern deine History, BrowserTyp, Windows-Version etc.
    Das Tool hat ca. 5 FreeKaskaden und ca. 10 Premium. Minimum 5 EUR für ein Volumen von 650MB.

    mmgg schrieb:

    ... aber ich tus nicht, ende


    Gratulation! Das magst du ja halten wie du möchtest.
    Aber bitte bring dieses Halbwissen nicht unter die Lernwilligen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    mmgg schrieb:

    ihr könnt ja dabei bleiben, aber ich tus nicht, ende

    Dann tue Dir und uns bitte den Gefallen und höre auf WPF zu proggn und vor allem irgendwelche derartigen Tipps zu geben.
    Es ist einfach Unsinn und man macht es nicht, "ende".
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: