Laden...

Listbox Items auswählen und per Button_Click Ereignis starten

Erstellt von Uff vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.156 Views
U
Uff Themenstarter:in
8 Beiträge seit 2019
vor 4 Jahren
Listbox Items auswählen und per Button_Click Ereignis starten

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

1.029 Beiträge seit 2010
vor 4 Jahren

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.

_
277 Beiträge seit 2014
vor 4 Jahren

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

T
461 Beiträge seit 2013
vor 4 Jahren

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... 😄

_
277 Beiträge seit 2014
vor 4 Jahren

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

U
Uff Themenstarter:in
8 Beiträge seit 2019
vor 4 Jahren

Danke für eure Hilfen und Anregungen.

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.

16.806 Beiträge seit 2008
vor 4 Jahren

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.

3.170 Beiträge seit 2006
vor 4 Jahren

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