Announcement

Collapse
No announcement yet.

WPF - Inhalt von Comboboxen übernehmen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WPF - Inhalt von Comboboxen übernehmen

    Hallo!

    Ich habe 5 Comboboxen, die alle den gleichen Inhalt haben sollen. Nun möchte ich der Übersicht wegen den Inhalt in Xaml nur in die erste Combobox schreiben und den Inhalt der anderen von dieser ersten übernehmen. Ich dachte, das geht mit Binding und habe das mit meinem Anfängerwissen einfach mal unten probiert, aber ich komme so nicht weiter:

    Code:
            <ComboBox Height="22" Margin="0,0,31,0" Name="cboMonat1" VerticalAlignment="Top" Grid.Column="1" Grid.Row="1">
                <ComboBoxItem Content="Januar" />
                <ComboBoxItem Content="Februar" />
                <ComboBoxItem Content="März" />
                <ComboBoxItem Content="April" />
                <ComboBoxItem Content="Mai" />
                <ComboBoxItem Content="Juni" />
                <ComboBoxItem Content="Juli" />
                <ComboBoxItem Content="August" />
                <ComboBoxItem Content="September" />
                <ComboBoxItem Content="Oktober" />
                <ComboBoxItem Content="November" />
                <ComboBoxItem Content="Dezember" />
            </ComboBox>
    
    
            <ComboBox Height="22" Margin="0,0,31,0" Name="cboMonat2" VerticalAlignment="Top" Grid.Column="1" Grid.Row="3" >
                <ComboBoxItem Content="{Binding ElementName=cboMonat1, Path=ComboBoxItem}" />
            </ComboBox>
    Wie müsste das korrekt aussehen?

    Gruß

    Kai
    Zuletzt editiert von gfoidl; 27.07.2010, 19:49. Reason: Präfix hinzugefügt

  • #2
    Hallo,

    pack die Monate in ein statische Ressource und binde alle ComboBoxen gegen diese Ressource. Wichtig dabei ist dass die IsSynchronizedWithCurrentItem auf True gesetzt ist - sonst wird nicht synchronisiert.

    Beispiel:
    Code:
    <Window x:Class="WpfApplication1.MainWindow"
    		xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    		xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    		Title="MainWindow" Height="350" Width="525">
    	<Window.Resources>
    		<XmlDataProvider x:Key="MonateDataProvider" XPath="/Monate/*">
    			<x:XData>
    				<Monate xmlns="">
    					<Monat Name="Jänner" />
    					<Monat Name="Februar" />
    					<Monat Name="März" />
    					<Monat Name="April" />
    					<Monat Name="Mai" />
    					<Monat Name="Juni" />
    					<Monat Name="Juli" />
    					<Monat Name="August" />
    					<Monat Name="September" />
    					<Monat Name="Oktober" />
    					<Monat Name="November" />
    					<Monat Name="Dezember" />
    				</Monate>
    			</x:XData>
    		</XmlDataProvider>
    		<DataTemplate x:Key="MonatItemTemplate">
    			<TextBlock Text="{Binding XPath=@Name}" FontSize="12" />
    		</DataTemplate>
    	</Window.Resources>
    	<StackPanel Orientation="Vertical">
    		<ComboBox ItemsSource="{Binding Source={StaticResource MonateDataProvider}}"
    				  ItemTemplate="{StaticResource MonatItemTemplate}"
    				  IsSynchronizedWithCurrentItem="True"
    				  Padding="4"/>
    		<ComboBox ItemsSource="{Binding Source={StaticResource MonateDataProvider}}"
    				  ItemTemplate="{StaticResource MonatItemTemplate}"
    				  IsSynchronizedWithCurrentItem="True"
    				  Padding="4"/>
    	</StackPanel>
    </Window>
    Zusätzlich habe ich hier ein DataTemplate in der Ressource erstellt und verwendet -> ist für alle ComboBoxen wiederverwendar. Ohne DataTemplate müsste eine ComboBox so aussehen - ist mMn umständlicher
    Code:
    <ComboBox ItemsSource="{Binding Source={StaticResource MonateDataProvider}}"
    				  IsSynchronizedWithCurrentItem="True"
    				  Padding="4">
    			<ComboBox.ItemTemplate>
    				<DataTemplate>
    					<TextBlock Text="{Binding XPath=@Name}" FontSize="12" />
    				</DataTemplate>
    			</ComboBox.ItemTemplate>
    		</ComboBox>
    [offtopic]
    Da ich gerade selbst WPF lerne bin ich wirklich froh dass du diese Frage gestellt hast. Ich dachte mir deine Frage wäre leicht, aber ich musste mir trotzdem noch mal ein paar Sachen durchlesen. Ja - so lerne ich auch dazu ;-)
    [/offtopic]


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hallo!

      Erst einmal vielen Dank für Deine Mühe!!

      Das habe ich mir einfacher vorgestellt, aber das habe ich mich schon oft sagen hören, seitdem ich WPF begegnet bin.... :-)

      Ich habe das jetzt so eingebaut wie von Dir beschrieben, es klappt auch grundsätzlich, nur reagiert die Combobox anders als in meinem Beispiel:

      Mit Deinem Template ist der Januar bereits selektiert, es soll aber kein Monat ausgewählt sein. Ich weiß einfach nicht, wie ich das ändern kann. Hast Du eine Idee?

      Gruß

      Kai

      Comment


      • #4
        Hallo,

        ja ich habe eine Idee: Füge vor dem Jänner noch ein Item "noch nichts gewählt" oder so irgendwie hinzu (kann auch ein ein leerer string sein). Dann ist dieses standardmäßig gewählt - das standardmäßige Vorauswählen ist bedingt durch das IsSynchronizedWithCurrentItem bei dem zu Beginn das 1. Element genommen wird.


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Hallo!

          Ich hatte schon einiges ausprobiert, auch das, was Du sagtest.

          Aber die Auswahlmöglichkeit per Tastatur, also Auswahl von "Februar", wenn ich ein "f" eintippe, funktioniert noch nicht.

          "IsSynchronizedWithCurrentItem" ist nicht dran Schuld. Mir ist gar nicht klar, wofür ich das auf True setzen sollte, es klappt doch auch ohne gut.

          Danke für Deine Geduld.

          Gruß

          Kai

          Comment


          • #6
            Hallo!

            Ich habe gestern noch lange herumprobiert und gebe es jetzt auf. In VB-Code habe ich das in Nullkommanix programmiert.

            Da taucht für mich wie schon einge Male die Frage auf, wofür soll ich ehrgeizig Dinge in XAML programmieren, die ich auch im Code-Behind coden kann?

            Gerade als WPF-Anfänger dauert es in XAML länger, an jeder Ecke lauern Probleme und was bei umfangreicheren Tests noch an Fehlern zum Vorschein kommt, weiß ich heute noch gar nicht. Da ist der gewohnte (VB-)Code doch wesentlich berechenbarer.

            Wo sind die konkreten Vor- und Nachteile?

            Aber da die Frage hier OT ist, mache ich mal einen neuen Thread auf

            Gruß

            Kai
            Zuletzt editiert von gfoidl; 29.07.2010, 09:53. Reason: Link zum neuen Thread eingefügt

            Comment

            Working...
            X