Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Listbox Items auswählen und per Button_Click Ereignis starten
Uff
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

Listbox Items auswählen und per Button_Click Ereignis starten

beantworten | zitieren | melden

Hallo liebes Forum,

ich stehe mit meinem Programm vor einem kleinen Problem zu dem ich leider bisher keine Lösung finden konnte.

Ich habe wie folgt generiert wird:
code in der .xaml.cs datei:


 List<SAListenelement> SAListe1 = new List<SAListenelement>(); 
            for (x = 0; x < sacount; x++)
            {
             SAListe1.Add(new SAListenelement() { Title = saneu[x]});             
            }
            LISTE1.ItemsSource = SAListe1;
code in der .xaml datei:

        <ListBox Name="LISTE1" Margin="0,41,487.667,0.333">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="0,2">
                        <TextBlock Text="{Binding Title}"/>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
Die Darstellung der Liste und die Titelzuweisung der einzelnen Elemente funktionieren. Ich möchte nun, dass bei auswahl eines Listenelements nach Klick auf einen Button ein Ereignis getriggert wird.
Meine Idee


        private void Button1_Click(object sender, RoutedEventArgs e)
        {
            if(LISTE1.SelectedItem[0] = true) {}
        }
funktioniert leider nicht. Kann mir vielleicht jemand sagen wie ich die Bedingung für das if formulieren muss, damit gefragt wird ob(oder welches) ein Listenelement ausgewählt wurde
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Uff am .
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Hi,

du solltest dir noch mal anschauen, wie man das in WPF besser macht. Wenn du so weiter machen möchtest wie jetzt wäre in meinen Augen WindowsForms besser geeignet als WPF.

Wie man das richtig macht: [Artikel] MVVM und DataBinding

Abseits davon: Für C#-Code bitte C#-Tags benutzen - für XAML gibts XML-Tags - macht's übersichtlicher für die Leser - ich bezweifle nämlich, dass jemand versucht deinen Code so zu lesen...

Edit:
Ja der Beitrag ist kurz und auf den ersten Blick nicht direkt hilfreich - dennoch nicht bös gemeint - denn wer den Artikel liest und umsetzt wird schnell feststellen, dass dies die korrekte Art ist mit WPF zu arbeiten. Die Arbeit wie sie in WinForms oft gemacht wird - ist unter WPF schlicht nicht angebracht. Im Normalfall sollte auf diese Art das Problem nicht mehr auftauchen - und selbst wenn es das doch tut - kann man bei Anwendung von MVVM und CodeTags ernsthafte Hilfe erwarten und hat zusätzlich den Vorteil, dass es plötzlich ganz viele Tutorials gibt die zur eigenen Arbeit passen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Taipi88 am .
private Nachricht | Beiträge des Benutzers
_Cashisclay
myCSharp.de - Member



Dabei seit:
Beiträge: 279

beantworten | zitieren | melden

Hey Uff,

solche Antworten wie von Taipi88 hasse ich persönlich.

Ich kenne das, man versucht es ewig alleine, hat schon gegoogled und wendet sich dann hoffnungsvoll an ein Forum, um dort zu hören man sollte es anders machen.

Allerdings muss man in dem Fall sagen, er hat recht.

Du solltest wirklich auf das MVVM Pattern sowie auf DataBindings setzen, das macht die Sache wesentlich leichter und auch angenehmer damit zu arbeiten.

Ansonsten zu deiner Frage :

Theoretisch sollte LISTE1.SelectedItem != null dir sagen ob bereits ein Element ausgewählt wurde.

Grüße
private Nachricht | Beiträge des Benutzers
ThomasE.
myCSharp.de - Member



Dabei seit:
Beiträge: 453

beantworten | zitieren | melden

Zitat von _Cashisclay
solche Antworten wie von Taipi88 hasse ich persönlich.

Er verweist auf einen vorhandenen Einstieg Forumsintern, welcher Zeitintensiv von Freiwilligen erstellt worden ist, um genau Anfänger diese Hilfe zu bieten, ohne alles doppelt und 4869fach neu runterleiern zu müssen.

Ich nehme deine persönliche Meinung zur Kenntnis, dennoch sollte man mal darüber nachdenken.
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen...
private Nachricht | Beiträge des Benutzers
_Cashisclay
myCSharp.de - Member



Dabei seit:
Beiträge: 279

beantworten | zitieren | melden

Sollte auch kein persönlicher Angriff sein und der Verweis darauf ist wie bereits erwähnt auch nicht verkehrt, allerdings beantwortet das seine Frage überhaupt nicht.

Grüße
private Nachricht | Beiträge des Benutzers
Uff
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Danke für eure Hilfen und Anregungen.
Zitat
Theoretisch sollte LISTE1.SelectedItem != null dir sagen ob bereits ein Element ausgewählt wurde.
Das funktioniert auch, ich möchte jedoch abfragen WELCHES element ausgewählt wurde. Jedem Element wird ja ein anderer string "Title" zugewiesen, es muss also doch eine Möglichkeit geben zu unterscheiden welches Element ausgewählt wurde?

Vielen Dank.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15704
Herkunft: BW

beantworten | zitieren | melden

In MVVM arbeitet man mit Databinding.
Das heisst, die ListBox bindet das selektierte Element auf eine Property im ViewModel.
Dazu muss die ListBox aber aus einer ItemSource leben.

Erster Google Treffer zu "mvvm listbox selecteditem" liefert mir folgendes Sample:

private ObservableCollection<DisneyCharacter> p_DisneyCharacters;
public ObservableCollection<DisneyCharacter> DisneyCharacters
{
    get { return p_DisneyCharacters; }

    set
    {
        p_DisneyCharacters = value;
        base.FirePropertyChangedEvent("DisneyCharacters");
    }
}

private DisneyCharacter p_SelectedItem;
public DisneyCharacter SelectedItem
{
    get { return p_SelectedItem; }

    set
    {
        p_SelectedItem = value;
        base.FirePropertyChangedEvent("SelectedItem");
    }
}
<ListBox ItemTemplate="{StaticResource MasterTemplate}"
         ItemsSource="{Binding Path=DisneyCharacters}" 
         SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay}" 
         HorizontalAlignment="Stretch" />

Dadurch hast Du im ViewModel dann eine Eigenschaft, die die Selektierung darstellt.

Willst Du auf DataBinding verzichten oder verzichtest aus anderen Gründen drauf, dann wirst Du von einem Workaround in den anderen Workaround stolpern.
WPF ist so konzipiert, dass MVVM maßgeblich zum Einsatz kommt.
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3429
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

und den Button dann auch nicht mit Click-Event im Code behind behandeln, sondern Command Binding benutzen und ein Command aus dem Viewmodel dran binden.
Dort ist dann wenn das SelectedItem richtig gebunden dasselbe schon bekannt und kann direkt verwendet werden.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers