none
ListBoxItem an TextBox übergeben RRS feed

  • Frage

  • Es sollte eine ganz einfache Prozedur werden aber ...

    Es besteht eine Page "Page1_Unternehmen" "mit einer TextBox "ds_stamm_bezug" . Außerdem ein Usercontrol "ListBoxSelect_UserControl1"

    In dem UserControl eine Listbox "ds_stamm_bezug_select"

    Diese Listbox bezieht ihre Daten beim Laden aus einer Datenbank. Das funktioniert. 

    Der selectierte Wert der Listbox soll an die TextBox der Page übergeben werden.

    Folgende Variante funktioniert nicht:

    Dim Page1_Unternehmen As New Page1_Unternehmen
    
     If True Then
                    Dim xyz = TryCast(Me.ds_stamm_bezug_select.SelectedItem, DataRowView)
                    If xyz IsNot Nothing Then
                        Dim zzz = xyz("back_status_bezeichner").ToString()
                        Page1_Unternehmen.ds_stamm_bezug.Text = zzz
                    End If
                End If

    Befindet sich eine TextBox im UserControl funktioniert die Übergabe des ausgewählten ListBox Items.

    Die Übergabe zwischen dem Usercontrol und der Page funktioniert nicht.

    Was mache ich falsch? Könnt Ihr mir bitte so antworten das ich es verstehe; bitte.


    Montag, 3. Oktober 2022 10:06

Antworten

  • Hallo Thomas!

    Als Erstes muss ich fragen: Bist du überhaupt noch an einer Lösung interessiert oder hat es sich bereits "erledigt"?

     

    Als Zweites: Du hast deine Frage in einem WPF-Forum gestellt und möchtest demzufolge auch mit WPF / WPF konform - programmieren?! Daraus resultieren gewisse Grundsätze...

     

    Als Drittes, ich programmiere mit C# und nicht mit VB deshalb kann ich dir nur funktionierende C# Beispiele zeigen.

     

    So, nun mal zu einem Grundlegendem Ansatz: (D)ein UserControl sollte als Eigenschaft den Wert, den du auf deiner Page anzeigen möchtest bereitstellen. Idealer Weise gleich als DependencyProperty es gehen aber auch Stammtypen (String, Integer, Boolean ...). Deine TextBlock-Text-Eigenschaft bindest du dann an die UserControl-Eigenschaft. Fertig.

    Wenn interesse besteht, zeige ich dir das konkret an einem Beispiel.

    Fred.

    Das blau eingerahmte Objekt ist ein UserControl und die rot eingrahmten Objekte sind Objekte des Fensters, auf dem sich das UserControl befindet.

    Der Zugriff auf die selektierte Eigenschaft des UserControls kann durch einfaches Binding hergestellt werden:

    <Border BorderBrush="Blue" BorderThickness="5">
        <uc:UserControl1 x:Name="ucAuswahl" />
    </Border>
    <Border BorderBrush="Red" BorderThickness="3" Background="AntiqueWhite" Padding="3">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="Wert der Eigenschaft: MeinStringWert ,vom UserControl:" VerticalAlignment="Center" FontWeight="Bold"/>
            <TextBlock Text="{Binding MeineStringAuswahl, ElementName=ucAuswahl}" />
        </StackPanel>
    </Border>
    

    Montag, 21. November 2022 11:17

Alle Antworten

  • Hallo Thomas,

    Eine Auflistung kannst Du außerhalb des Benutzersteuerelements mithilfe der Anwendungsressourcen (Application.Current.Ressources) zugänglich machen. Darauf geht die vorletzte Antwort in diesem Thread ein:
    How to pass a ListBox data between 2 userControls WPF

    Den dort erwähnten Artikel "Dynamic XAML: Composed View" (nicht mehr abrufbar) konnte ich nicht ausfindig werden, dafür aber einen Artikel des gleichen Autors in der TechNet-Wiki zum Thema mit Codebeispielen, und ich würde Dir empfehlen, es durchzuarbeiten:
    WPF: Tips - Bind to Current item of Collection

    Dazu noch der Artikel über die Application.Resources-Eigenschaft:
    Application.Resources Eigenschaft

    Was mache ich falsch? Könnt Ihr mir bitte so antworten das ich es verstehe; bitte.
    Im ersten Absatz des Abschnitts Why Use This? werden die Besonderheiten eines Verweises auf das Steuerelement und der sich daraus ergebenden Abhängigkeit erklärt. Man muss also entweder auf die Anwendungsressourcen (wie bereits empfohlen) zugreifen oder eine Bindung an eine Eigenschaft des ViewModels zusammen mit dem Verweis auf das Steuerelement hinzufügen.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 3. Oktober 2022 20:22
    Moderator
  • Es hat erstens nichts mit dem Thema zu tun und ist deswegen auch keine brauchbare Antwort, aber @DimitarDenkov, vielleicht können wir ja mal nach einem lauten, entspannenen Seufzer gemeinsam feststellen, dass das gesamte Design-Pattern von WPF und XAML ein einziger Haufen Schrott ist und seitens der Community schon längst in die Tonne getreten, nur MS klammert sich noch daran? Zustimmung?

    Der grundlegende Fehler (root-cause analysis) begann bereits in System.Windows.Forms mit dem Thread-Apartment-Model. Und davon hat sich MS bis heute nicht gelöst. Ich feuere zwischen UI und WF-Layer und sonstwo in meinem eigenen Framework fröhlich Events quer durch Threads, durch Prozesse, über Domänen, zwischen verschiedenen Servern auch wirklich räumlich weit auseinander in zeitkritischen Anwendungen und übrigens auch von Linux zu Windows hin und her, und alle sind zufrieden, und niemand kackt sich an sowas wie ner Datenbindung an ein UI-Element, und ich habe noch keine einzige Zeile Semmel, ähm XAML geschrieben... Tja.


    • Bearbeitet Mr Scoville Donnerstag, 6. Oktober 2022 18:30 typo
    Donnerstag, 6. Oktober 2022 18:27
  • Hallo Thomas!

    Als Erstes muss ich fragen: Bist du überhaupt noch an einer Lösung interessiert oder hat es sich bereits "erledigt"?

     

    Als Zweites: Du hast deine Frage in einem WPF-Forum gestellt und möchtest demzufolge auch mit WPF / WPF konform - programmieren?! Daraus resultieren gewisse Grundsätze...

     

    Als Drittes, ich programmiere mit C# und nicht mit VB deshalb kann ich dir nur funktionierende C# Beispiele zeigen.

     

    So, nun mal zu einem Grundlegendem Ansatz: (D)ein UserControl sollte als Eigenschaft den Wert, den du auf deiner Page anzeigen möchtest bereitstellen. Idealer Weise gleich als DependencyProperty es gehen aber auch Stammtypen (String, Integer, Boolean ...). Deine TextBlock-Text-Eigenschaft bindest du dann an die UserControl-Eigenschaft. Fertig.

    Wenn interesse besteht, zeige ich dir das konkret an einem Beispiel.

    Fred.

    Das blau eingerahmte Objekt ist ein UserControl und die rot eingrahmten Objekte sind Objekte des Fensters, auf dem sich das UserControl befindet.

    Der Zugriff auf die selektierte Eigenschaft des UserControls kann durch einfaches Binding hergestellt werden:

    <Border BorderBrush="Blue" BorderThickness="5">
        <uc:UserControl1 x:Name="ucAuswahl" />
    </Border>
    <Border BorderBrush="Red" BorderThickness="3" Background="AntiqueWhite" Padding="3">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="Wert der Eigenschaft: MeinStringWert ,vom UserControl:" VerticalAlignment="Center" FontWeight="Bold"/>
            <TextBlock Text="{Binding MeineStringAuswahl, ElementName=ucAuswahl}" />
        </StackPanel>
    </Border>
    

    Montag, 21. November 2022 11:17
  • Hallo Thomas!

    Nach der Antwort von Dimitar bin ich mir nicht mehr so sicher, was du eigentlich möchtest!

    Möchtest du die Source der ListBox des UserControls zentral verfügbar machen? Oder einfach nur den Wert des selektierten Eintrages der ListBox des UserControls auf einer Page anzeigen?

    Falls du deine Frage noch verfolgst ...

    Fred.

    Dienstag, 22. November 2022 09:22