Laden...

2 abhängige ComboBox mit Eingabe von Werte

Erstellt von Henri vor 6 Jahren Letzter Beitrag vor 6 Jahren 5.349 Views
H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren
2 abhängige ComboBox mit Eingabe von Werte

Hallo Leute,

ich habe die Beide ComboBox ,möchte eine Abhängigkeit zwischen die Beiden aufbauen,


<ndc:LabeledContentControl LabelSharedSizeGroup="Group10_120" Header="Schnitt:" Margin="0,0,0,6" Name="SchnittLCC">
          <ComboBox Name="Schnitt" SelectionChanged="Schnitt_SelectionChanged"></ComboBox>
        </ndc:LabeledContentControl>
        <ndc:LabeledContentControl LabelSharedSizeGroup="Group10_120" Margin="0,0,0,6" Name="schnittLCC1" Header="Schnitt A:">
          <ComboBox Name="Schnitt1" SelectionChanged="Schnitt_SelectionChanged"></ComboBox>
</ndc:LabeledContentControl> 

Wenn ich z.B. die fogende Werte eintrage:
Schnitt: | Schnitt A
I | Höhe
II | Länge
III | Breite

dann kehre ich in meine darstellung, wähle ich I wird das Feld von Schnitt A automatik ausgefüllt mit dem Wert Höhe, es sollte genaus laufen wenn ich II wähle wird das Feld Schnitt A mit dem Wert Länge ausgefüllt.

PS. Die Werte sind in einem DB gespeichert.

Ich hoffe konntet ihr verstehen was ich meine. Wenn frage gibt, antworte ich auch

Vielen Dank im Voraus

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

sieht so aus, als würdest du nicht mit MVVM und DataBinding arbeiten...

Naja - auf folgender Seite siehst du wie's mit o.g. Techniken geht. Kann dir nur empfehlen dich mit beidem auseinanderzusetzen - sonst wird dir WPF keinen Spaß machen.

https://social.technet.microsoft.com/wiki/contents/articles/17946.cascading-comboboxes-in-wpf-using-mvvm.aspx

LG

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Henri,

dazu auch passend der Artikel im Forum.

[Artikel] MVVM und DataBinding

Gruss

Coffeebean

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

dazu auch passend der Artikel im Forum.

Hi Taipi88,

Vielen Dank mit dem Link. leider hilf mir nicht so, habe ich schon ein ähnliches Ergebnis.
Wenn ich mich auf dem Link beziehe, wird unter jedes Land 3 Städte zu wählen.
dh wählt man zu erst ein Land dann kann man ein Stadt auswählen.

Bei mir geht es darum unter Schritt wird genau einen Wert gespeichert und unter Schritt A auch einen einzigen Wert gespeichert, dann möchte ich wenn ich einen Wert aus Schritt auswähle, sollte die zugewiesen Wert aus Schritt A das Feld automatisch ausfüllen, daran liegt mein Problem.

Wenn ich auf meinem Beispiel wieder Komme, d.h
wähle ich z.B. I dann sollte das Feld von Schritt A mit länge automatisch ausgefüllt.

2.078 Beiträge seit 2012
vor 6 Jahren

Mit MVVM ist das problemlos möglich.

Da hast Du ein ViewModel mit vier Properties:1.Die verfügbaren Inhalte der ersten ComboBox 1.Die verfügbaren Inhalte der zweiten ComboBox 1.Das ausgewählte Element der ersten ComboBox 1.Das ausgewählte Element der zweite ComboBox

Wenn der Nutzer nun in der ersten ComboBox ein Wert auswählt, dann musst Du in der zugehörigen Property nur den Wert der anderen Property entsprechend setzen.
Durch das entsprechend gesetzte Binding wird die Auswahl in der View automatisch in die Property vom ViewModel geschrieben und die Änderung an der ViewModel-Property wird automatisch in der View übernommen.


public ObservableCollection<string> Items1 { get; }
public ObservableCollection<string> Items2 { get; }
public string SelectedItem1
{
    get => _selectedItem1;
    set
    {
        _selectedItem1 = value;

        if (value == "A")
            SelectedItem2 = "bla";

        RaisePropertyChanged();
    }
}
public string SelectedItem2
{
    get => _selectedItem2;
    set
    {
        _selectedItem2 = value;
        RaisePropertyChanged();
    }
}
<ComboBox ItemsSource="{Binding Items1}" SelectedValue="{Binding SelectedItem1}" />
<ComboBox ItemsSource="{Binding Items2}" SelectedValue="{Binding SelectedItem2}" />

Das Schnipsel ist direkt im Browser geschrieben.
Aber ich hoffe, das Grundprinzip wird dennoch deutlich.

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

dann verstehe ich die Frage und das Problem denke ich nicht.

Also, du hast:
2 Comboboxen, Box-A und Box-B

Wenn du in Box-A etwas auswählst, soll wohl in Box-B automatisch auch ein Wert gesetzt werden. Gilt das umgekehrt genauso?

Wenn ja:
Warum brauchst du dann bitte 2 ComboBoxen? Eine reicht doch aus 😕

LG

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

Wenn du in Box-A etwas auswählst, soll wohl in Box-B automatisch auch ein Wert gesetzt werden. Gilt das umgekehrt genauso?

Wenn ja:
Warum brauchst du dann bitte 2 ComboBoxen? Eine reicht doch aus 😕

es ist genau was ich meine , das umgekehrt wäre auch sehr gut, aber muss ich nur sagen die Werte sind nicht vordefiniert , der Benutzer trägt die Werte selbst ein.

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

nun - wenn die Auswahl eines Wertes - automatisch und definitiv die automatische Auswahl des anderen Wertes (und umgekehrt) bedingt, dann brauchst du nur eine ComboBox, der angezeigte Werte kann ja eine Stringverkettung sein.

Wenn dabei etwas nicht klappt - zeigst du am besten etwas Code.

LG

D
985 Beiträge seit 2014
vor 6 Jahren

Mein Vorschlag wäre so

ViewModel


public class MainViewModel : ReactiveObject
{
    private SchnittItem _currentSchnitt;

    public MainViewModel()
    {
        Schnitte = new ObservableCollection<SchnittItem>(new[]
        {
            new SchnittItem { LLC = "I", A = "Höhe" },
            new SchnittItem { LLC = "II", A = "Länge" },
            new SchnittItem { LLC = "III", A = "Breite" },
        });

        CurrentSchnitt = Schnitte.FirstOrDefault();
    }

    public ObservableCollection<SchnittItem> Schnitte { get; }
    public SchnittItem CurrentSchnitt { get => _currentSchnitt; set => this.RaiseAndSetIfChanged(ref _currentSchnitt, value); }
}

public class SchnittItem : ReactiveObject
{
    private string _llc;
    private string _a;

    public string LLC { get => _llc; set => this.RaiseAndSetIfChanged(ref _llc, value); }
    public string A { get => _a; set => this.RaiseAndSetIfChanged(ref _a, value); }
}

und die View


<Window x:Class="WpfApp31.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp31"
        xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <local:MainViewModel/>
    </Window.DataContext>
    <Window.Resources>
        <CollectionViewSource x:Key="SchnitteLLC" Source="{Binding Schnitte}">
            <CollectionViewSource.SortDescriptions>
                <scm:SortDescription PropertyName="LLC"/>
            </CollectionViewSource.SortDescriptions>
        </CollectionViewSource>
        <CollectionViewSource x:Key="SchnitteA" Source="{Binding Schnitte}">
            <CollectionViewSource.SortDescriptions>
                <scm:SortDescription PropertyName="A"/>
            </CollectionViewSource.SortDescriptions>
        </CollectionViewSource>
    </Window.Resources>
    <Grid>
        <StackPanel Orientation="Horizontal" VerticalAlignment="Top">
            <ComboBox ItemsSource="{Binding Source={StaticResource SchnitteLLC}}" SelectedItem="{Binding CurrentSchnitt}" DisplayMemberPath="LLC"/>
            <ComboBox ItemsSource="{Binding Source={StaticResource SchnitteA}}" SelectedItem="{Binding CurrentSchnitt}" DisplayMemberPath="A"/>
        </StackPanel>
    </Grid>
</Window>

Beide ComboBoxen zeigen immer das gleiche Item an, allerdings sind die Items in jeder ComboBox anders sortiert.

ComboBox1 = I, II, III
ComboBox2 = Breite, Höhe, Länge

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

Also Leute ich benutze zwar ein andere Framework, aber es sollte kein Thema für die gute Programmierer dieser Seite, mein bisjetzt Code sieht so aus:
Vielen Dank für eure Hilfe


<ndc:LabeledContentControl LabelSharedSizeGroup="Group10_120" Margin="0,0,0,6" Name="schnittLCC" Header="Schnitt:">
    <ComboBox Name="schnitt" SelectionChanged="schnitt_SelectionChanged"></ComboBox>
</ndc:LabeledContentControl>
<ndc:LabeledContentControl LabelSharedSizeGroup="Group10_120" Margin="0,0,0,6" Name="schnittLCC1" Header="schnitt A:">
      <ComboBox Name="schnitt1" SelectionChanged="schnitt_SelectionChanged"></ComboBox>
</ndc:LabeledContentControl>

D
985 Beiträge seit 2014
vor 6 Jahren

Dann kläre uns doch bitte auf welches Framework du verwendest.

Wir denken aktuell, du hast eine WPF Anwendung

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

Dann kläre uns doch bitte auf welches Framework du verwendest.

Wir denken aktuell, du hast eine WPF Anwendung

Hi Sir Rufo,

leider habe ich nicht diese Framework, war auf meinem Computer vorinstalliert, und findet man es auch nicht Online.
Aber ich hoffe kann jemandem mir einige Vorschlage machen, werde ich mal testen und Bescheid geben .

D
985 Beiträge seit 2014
vor 6 Jahren

Wenn du uns nicht sagen kannst, womit du arbeitest, wird dir auch der beste Programmierer nicht helfen können.

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

Wenn du uns nicht sagen kannst, womit du arbeitest, wird dir auch der beste Programmierer nicht helfen können.

Ich gebe dir ein bisschen Recht aber leider findet man es nicht online, weil ich selbst schon gesucht habe.
Aber einige Vorschläge wäre doch möglich

D
985 Beiträge seit 2014
vor 6 Jahren

Nein, wir (wenigstens ich nicht) klettern jetzt nicht in ein Hamsterrad und laufen dort so lange, bis du „STOP“ rufst.

Und Vorschläge hast du schon bekommen (auch von mir).

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Henri,

wir können dir nicht helfen wenn du uns Informationen vorenthältst. Wenn du nicht sagst, was du verwendest, ist das nicht schlimm, aber helfen können wir dann nicht. So leid es tut. Dann können wir den Thread auch zumachen, für uns ist das absolutes Raten.

Daher nochmal: Verwendest du WPF: Ja/Nein?

Gruss

Coffeebean

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

Daher nochmal: Verwendest du WPF: Ja/Nein?

Natürlich verwende ich WPF

2.078 Beiträge seit 2012
vor 6 Jahren

Dann funktioniert auch jeder einzelne hier beschriebene Vorschlag.

Das einzige, was flexibel ist, ist die Umsetzung der ViewModelBase.
Da gibt's einige Frameworks, die das machen, aber genauso gut kann man das auch selber implementieren.

Solange das PropertyChanged-Event (INotifyPropertyChanged) geworfen wird, wenn eine Property geändert wird, kann WPF darauf reagieren.

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

Also Leute,
Eure Beispiele arbeite mit feste Werte, aber die Werte können jedes Moment geändert werden.
dann mit den Beispielen geht es nicht mehr.
Wie sollte es sein , wenn die Werte jedes Moment ändern könnten.

Danke im Voraus

1
124 Beiträge seit 2012
vor 6 Jahren

Bei den Werten, die im späteren Programmverlauf anscheinend dazukommen, muss ja irgendwann und irgendwer die Verbindung/den Bezug definieren.

Die Frage ist was kommt dazu und wer muss den Zusammenhang definieren?

Ich glaube, das nicht das das programmiertechnische das Problem ist sondern ehr, das es kein Plan gibt was wie funktionieren soll und kann. Gibt es den ein Diagramm o.ä. wie es nachher aussehen soll?

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

Bei den Werten, die im späteren Programmverlauf anscheinend dazukommen, muss ja irgendwann und irgendwer die Verbindung/den Bezug definieren.

Also die Werte Sind in Felder eingegeben die mit einem ComboBox gebunden ist, dann in einer DB gespiechert.
Bei aufrufen den Werte werden die aus der DB geholt und dann dargestellt

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Henri,

bitte keine Full-Quotes [Hinweis] Wie poste ich richtig?

Gruss Coffeebean

1
124 Beiträge seit 2012
vor 6 Jahren

Genau, und wenn ich das richtige verstehe hast du ja dann die zweite ComboBox.
Dann muss ja jemand oder vom Programm definiert werden zu welchen Wert der eingegebe Wert in ComboBox zwei gehört.

Wie ist das gelöst?

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

Die Eingabefelde sehen so aus und kann von der Benutzer erweitern werden, für die erweiterung es ist gelöst
Bild entfernt - Coffeebean
Die sischbare Felder sehen so aus
Bild entfernt - Coffeebean
dan kann der Benutzer je nach seinem Bedarf auswählen so wie auf der Bilder

Hinweis von Coffeebean vor 6 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig?

T
461 Beiträge seit 2013
vor 6 Jahren

Also sind in der Datenbank die Verknüpfungen gegeben, hätte man gleich wissen sollen.

Dann sollte es mit den oberen Beispielen doch funktionieren, daß einzige was fehlt, ist die Zuweisung der Daten in die richtigen gebundenen Listen der ComboBoxen.

Dann sind die Werte immer laut DB aktuell...

Wie das geht ist eher eine andere Frage... 😉

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

1
124 Beiträge seit 2012
vor 6 Jahren

Okay, dann nimm die Lösung von Sir Rufo.
Du musst dann nur noch das so umbauen, das wenn jemand etwas eingegeben hat das dann ein neues SchnittItem erzeugt wird. Und dies in den comboBoxen integriert wird.

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

Sir Rufo,
arbeite mit einer feste Array, meins ist nicht fest, könnte jedes Moment durch der Benutzer geändert werden

T
461 Beiträge seit 2013
vor 6 Jahren

könnte jedes Moment durch der Benutzer geändert werden

Und wie wird das umgesetzt?
Die Eingabe muß ja gespeichert werden und wann weiß das System, welche neuen EInträge wie zusammen gehören? Geht doch nur durch den Benutzer, es müßte also -ich füge einen neuen Eintrag hinzu- geben.

Wurde er hinzugefügt, muß er dann auch in beiden gebundenen Listen aktualisiert werden.

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

1.040 Beiträge seit 2007
vor 6 Jahren

Mal davon ab, dass ich wie Taipi88 nicht verstehe warum du zwei ComboBoxen brauchst:

Womit kommst du nicht weiter?*den Wert einer ComboBox in Abhängigkeit der anderen ComboBox zu setzen *dynamisch Werte zu den ComboBoxen hinzuzufügen

🤔

D
985 Beiträge seit 2014
vor 6 Jahren

warum du zwei ComboBoxen brauchst:

Na für die Einen ist es ein Keksriegel und für die Anderen die längste Pr*line der Welt.

Es gibt für ein- und dieselbe Sache durchaus unterschiedliche Bezeichnungen. Um den Benutzer jetzt dort abzuholen, wo er sich befindet, bietet man eben (gleichzeitig) die unterschiedlichen Namesräume (jeweils in sich sortiert) an.

Ein Beispiel wären z.B. die Währungscodes, für die es alphabetische und numerische Codes und einen Namen gibt. Der Benutzer, der mit den numerischen Codes arbeitet findet die Sortierung nach dem Namen bestimmt doof.

1.040 Beiträge seit 2007
vor 6 Jahren

Ein Beispiel wären z.B. die Währungscodes, für die es alphabetische und numerische Codes und einen Namen gibt. Der Benutzer, der mit den numerischen Codes arbeitet findet die Sortierung nach dem Namen bestimmt doof.

Danke. 👍
Wobei das ja auch keinen Einfluss auf das Problem hat.

H
Henri Themenstarter:in
55 Beiträge seit 2016
vor 6 Jahren

Leute
ich habe ein problem mit dem dynamisch Werte von ComboBox, ich habe schon alles versuchen leider geht es nicht, alles sollte in die Methode Schnitt_selectionChanged() passiert.
Ich möchte gern wenn ich ein Werte aus der Combobox Schnitt auswähle , sollte das die referenzierte Werte aus der ComboBox Schnitt1 automatisch ausgefüllt werden
ich bis jetzt nur das


void Schnitt_SelectionChanged(object sender, SelectionChangedEventArgs e)
	{
		// TODO: Implement Schnitt_SelectionChanged
		if((isSchnittInitialized) || (isSchnitt1Initialized))
		   
		   HasChanges = true;
	}

1.040 Beiträge seit 2007
vor 6 Jahren

alles sollte in die Methode Schnitt_selectionChanged() passiert.

Du solltest es vermeiden mit EventHandlern und CodeBehind zu arbeiten.

Dein Problem kann wunderbar mit MVVM und DataBinding gelöst werden.
Entsprechende Links und auch Beispiele hast du dafür ja bereits bekommen. =)

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo Henri,

beschäftige dich bitte mit DataBinding und MVVM.

Gruss

Coffeebean