none
ComboCheckBox on the fly erstellen RRS feed

  • Frage

  • Hallo, 

    ich möchte eine ComboCheckbox per Button-Click erstellen lassen. Sie soll zum Beispiel folgenden Xaml-Item-Eintrag haben:

    <ComboBoxItem>
           <CheckBox Name="TeaCheckBox">
                        <TextBlock Text="Tea"></TextBlock>
           </CheckBox>
    </ComboBoxItem>

    Wie muss ich den Code-Behind Code modifizieren, um das zu erreichen:

     cbx.Items.Add("Iced Tea");

    Ich brauche also eine Möglichkeit die XAML-Verschachtelung an Items.add zu übergeben.

    Gruß Andreas

    Samstag, 11. Juli 2015 18:35

Antworten

Alle Antworten

  • Hallo,

    jeder XAML-Knoten hat eine Entsprechung im Codebehind. Entsprechend kannst du dir die Instanzen auch manuell zusammen bauen:

    var tb = new TextBlock();
    tb.Text = "Tea";
    var cb = new CheckBox();
    cb.Content = tb;
    var cbi = new ComboBoxItem();
    cbi.Content = cb;
    
    cbx.Items.Add(cbi);
    Oder aber etwas kompakter:
    cbx.Items.Add(new ComboBoxItem()
    {
        Content = new CheckBox()
        {
            Content = new TextBlock()
            {
                tb.Text = "Tea",
            },
        },
    });
    Im allgemeinen ist es aber besser die ComboBox zu binden, dann kannst du einfach eine Auflistung im Codebehind/Model erweitern und die ComboBox aktualisiert sich selbstständig. Mehr zu Datenbindungen (ein sehr komplexes Thema) findest du hier.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 11. Juli 2015 20:00
    Moderator
  • vielen Dank für die Antwort. ja mit der Datenbindung bin ich auch schon am kämpfen. Manches klappt, manches noch unklar. Zum Beispiel: wenn ich neue Klassen als zusätzliche Window.Resourcen in XAML bekannt manchen will, bekomme ich die Fehlermeldung, dass diese neuen Klassen im Namespace nicht vorhanden sind, obwohl sie jeweils dieselben Namespaceeinträge haben:

    <Window x:Class="Binding3.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:Binding3"
            mc:Ignorable="d"
            Title="MainWindow" Height="659.75" Width="525">
        <Window.Resources>
            <local:Class2 x:Key="data2" />
            <local:Class1 x:Key="data" />
            <local:Class3 x:Key="data3" />
        </Window.Resources>

    Klasse 2 und 3 sind nicht im Namespace bekannt. Klasse 1 ist im Namespace bekannt. Was muss ich tun, um alle 3 Klassen im Namespace bekannt zu machen? Warum ist Klasse 1 bekannt, ist umgekehrt gefragt...auch unklar...

    Gruß Andreas

    Sonntag, 12. Juli 2015 14:30
  • Hi Andreas,
    schau mal im Visual Studio in die Klassenansicht, ob sie sich im richtigen Namensraum befinden und auch die Zugriffsmodifizierer ausreichend sind (z.B. public).

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Montag, 13. Juli 2015 04:43