none
SelectedValuePath mehrere Werte bzw. Werte miteinander verbinden RRS feed

  • Frage

  • Ich habe folgenden XAML Code:

    <ListBox Name="lst01" SelectedValuePath="Nachname" IsSynchronizedWithCurrentItem="True">
          <ListBox.ItemTemplate>
            <DataTemplate>
              <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding ID}" />
                <TextBlock Text=" - " />
                <TextBlock Text="{Binding Vorname}" />
                <TextBlock Text=" - " />
                <TextBlock Text="{Binding Nachname}" />
               </StackPanel>
            </DataTemplate>
          </ListBox.ItemTemplate>
        </ListBox>
    
    
    <Label Content="{Binding ElementName=lst01, Path=SelectedValue, Mode=OneWay}" Name="Label1"/>
    
    

    Wie ist es möglich das SelectedValuePath mehre Daten entält. z.B. Vorname und Nachname

    Wie ist es möglich das ich das Label1 auf ein anderes geöffnetes Fenster setze und trotzdem das Ergebnis wie oben beschrieben erhalte?

     


    Es geht mir um WPF(XAML) Visual Studio Proff. 2010, Win7 und verständliche Hilfe.
    Montag, 29. August 2011 13:46

Antworten

  • Hi Thomas,

    hmm, das klingt nach dem typischen Fall eines MultiBindings. Evt. hilft Dir mein blog-post (engl.) zum Zusammenfügen mehrerer Felder mittels IMultiValueConverter weiter ..?


    Cheers,
    Olaf
    http://blogs.intuidev.com
    • Als Antwort markiert Thomas2705 Montag, 29. August 2011 16:45
    Montag, 29. August 2011 15:05
  • Hi Thomas,

    ah, sorry - ist untergangen.

    Mit einem reinen Binding kommst Du hier nicht zum Ziel. Zunächst einmal ausgehend davon, dass es sich um einen einzelnen TextBlock handelt, könntest Du aber im View Model (oder Code-behind des Windows) eine Property implementieren, die den Text des TextBlocks zurückgibt. DeinTextBlock.Text würde dann den "zusammengesetzten" Text enthalten, der über die Property zurückgegeben werden könnte. Das zweite Fenster müsste also eine Referenz auf das erste haben und könnte dann die Property abfragen.

    Da Du aber den Text ganz offensichtlich innerhalb einer ListBox präsentierst und Du den Text wie dort per XAML definiert erhalten möchtest, müsstest Du zur Laufzeit zunächst anhand des SelectedItem der ListBox den TextBlock extrahieren, der den gewünschten Text enthält. Dazu könntest Du die ItemContainerGenerator.ContainerFromItem Methode verwenden (s. hier für ein Beispiel). Dabei ist allerdings zu beachten, dass das über den VisualTree läuft. Soll heißen, der selektierte Eintrag muss in den VisualTree geladen sein, ansonsten liefert die zuvor geannte Methode null/Nothing. Insofern ist das ein wenig wackelig (ich vermeide es, wenn's irgendwie geht).

    Die Alternative wäre, entweder das gleiche Konstrukt in zweiten Fenster aufzubauen, oder halt im Model eine Property aufzubauen, die den tatsächlichen Text (per Code) zusammensetzt und dann in der Oberfläche bzw. im View daran zu binden. In diesem Fall würde es dann ausreichen, den SelectedItem der ListBox in Fenster1 nach außen zu reichen, damit Fenster2 ihn wiederum verwenden kann.

    Cheers,
    Olaf
    http://blogs.intuidev.com
    • Als Antwort markiert Thomas2705 Dienstag, 30. August 2011 07:40
    Dienstag, 30. August 2011 07:27
  • Ich danke Dir sehr für Deine Antwort. Ich werde den ersten Lösungsvorschlag nachbasteln.

    P.S. kannst Du Deine HP nicht auch in deutscher Sprache verfassen!?

    Tschüß Thomas


    Es geht mir um WPF(XAML) Visual Studio Proff. 2010, VisualBasic, Win7 und verständliche Hilfe. Als Quelle nutze ich oft msdn Hilfe.
    • Als Antwort markiert Thomas2705 Dienstag, 30. August 2011 07:42
    Dienstag, 30. August 2011 07:40

Alle Antworten

  • Hi Thomas,

    hmm, das klingt nach dem typischen Fall eines MultiBindings. Evt. hilft Dir mein blog-post (engl.) zum Zusammenfügen mehrerer Felder mittels IMultiValueConverter weiter ..?


    Cheers,
    Olaf
    http://blogs.intuidev.com
    • Als Antwort markiert Thomas2705 Montag, 29. August 2011 16:45
    Montag, 29. August 2011 15:05
  • Danke für Deine ANtwort.

    Kannst DU mir auch meine zweite Frage beantworten?


    Es geht mir um WPF(XAML) Visual Studio Proff. 2010, VisualBasic, Win7 und verständliche Hilfe. Als Quelle nutze ich oft msdn Hilfe.
    Montag, 29. August 2011 16:45
  • Hi Thomas,

    ah, sorry - ist untergangen.

    Mit einem reinen Binding kommst Du hier nicht zum Ziel. Zunächst einmal ausgehend davon, dass es sich um einen einzelnen TextBlock handelt, könntest Du aber im View Model (oder Code-behind des Windows) eine Property implementieren, die den Text des TextBlocks zurückgibt. DeinTextBlock.Text würde dann den "zusammengesetzten" Text enthalten, der über die Property zurückgegeben werden könnte. Das zweite Fenster müsste also eine Referenz auf das erste haben und könnte dann die Property abfragen.

    Da Du aber den Text ganz offensichtlich innerhalb einer ListBox präsentierst und Du den Text wie dort per XAML definiert erhalten möchtest, müsstest Du zur Laufzeit zunächst anhand des SelectedItem der ListBox den TextBlock extrahieren, der den gewünschten Text enthält. Dazu könntest Du die ItemContainerGenerator.ContainerFromItem Methode verwenden (s. hier für ein Beispiel). Dabei ist allerdings zu beachten, dass das über den VisualTree läuft. Soll heißen, der selektierte Eintrag muss in den VisualTree geladen sein, ansonsten liefert die zuvor geannte Methode null/Nothing. Insofern ist das ein wenig wackelig (ich vermeide es, wenn's irgendwie geht).

    Die Alternative wäre, entweder das gleiche Konstrukt in zweiten Fenster aufzubauen, oder halt im Model eine Property aufzubauen, die den tatsächlichen Text (per Code) zusammensetzt und dann in der Oberfläche bzw. im View daran zu binden. In diesem Fall würde es dann ausreichen, den SelectedItem der ListBox in Fenster1 nach außen zu reichen, damit Fenster2 ihn wiederum verwenden kann.

    Cheers,
    Olaf
    http://blogs.intuidev.com
    • Als Antwort markiert Thomas2705 Dienstag, 30. August 2011 07:40
    Dienstag, 30. August 2011 07:27
  • Ich danke Dir sehr für Deine Antwort. Ich werde den ersten Lösungsvorschlag nachbasteln.

    P.S. kannst Du Deine HP nicht auch in deutscher Sprache verfassen!?

    Tschüß Thomas


    Es geht mir um WPF(XAML) Visual Studio Proff. 2010, VisualBasic, Win7 und verständliche Hilfe. Als Quelle nutze ich oft msdn Hilfe.
    • Als Antwort markiert Thomas2705 Dienstag, 30. August 2011 07:42
    Dienstag, 30. August 2011 07:40
  • Hi Thomas,
    P.S. kannst Du Deine HP nicht auch in deutscher Sprache verfassen!?

    ächz. Ich komme ja kaum dazu, überhaupt was zu schreiben ... :-)


    Cheers,
    Olaf
    http://blogs.intuidev.com
    Dienstag, 30. August 2011 07:41