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
» Datenschutzerklärung
» Impressum

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und Silverlight » Listbox Items auswählen und per Button_Click Ereignis starten
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Listbox Items auswählen und per Button_Click Ereignis starten

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Uff
myCSharp.de-Mitglied

Dabei seit: 14.05.2019
Beiträge: 8


Uff ist offline

Listbox Items auswählen und per Button_Click Ereignis starten

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

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:

C#-Code:
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:

XML-Code:
        <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

C#-Code:
        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 14.05.2019 13:08.

14.05.2019 12:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 935
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

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

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 14.05.2019 15:29.

14.05.2019 12:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
_Cashisclay _Cashisclay ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.10.2014
Beiträge: 238


_Cashisclay ist offline

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

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
14.05.2019 14:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ThomasE. ThomasE. ist männlich
myCSharp.de-Mitglied

avatar-178.gif


Dabei seit: 26.11.2013
Beiträge: 425
Entwicklungsumgebung: Visual Studio 2015Pro/2017Ent


ThomasE. ist offline

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

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.
14.05.2019 15:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
_Cashisclay _Cashisclay ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.10.2014
Beiträge: 238


_Cashisclay ist offline

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

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
15.05.2019 09:10 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Uff
myCSharp.de-Mitglied

Dabei seit: 14.05.2019
Beiträge: 8

Themenstarter Thema begonnen von Uff

Uff ist offline

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

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.
15.05.2019 11:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


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


Abt ist offline

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

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:

C#-Code (https://stackoverflow.com/questions/1384369/mvvm-binding-to-listbox-selecteditem):
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");
    }
}

XML-Code (https://stackoverflow.com/questions/1384369/mvvm-binding-to-listbox-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.
15.05.2019 11:56 Beiträge des Benutzers | zu Buddylist hinzufügen
MarsStein MarsStein ist männlich
myCSharp.de-Poweruser/ Experte

avatar-3191.gif


Dabei seit: 27.06.2006
Beiträge: 3.117
Entwicklungsumgebung: VS 2013, MonoDevelop
Herkunft: Trier -> München


MarsStein ist offline

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

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
15.05.2019 13:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Der letzte Beitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 16.06.2019 04:54