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
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.
LG
Hallo Henri,
dazu auch passend der Artikel im Forum.
[Artikel] MVVM und DataBinding
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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.
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.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
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
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.
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
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
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>
Dann kläre uns doch bitte auf welches Framework du verwendest.
Wir denken aktuell, du hast eine WPF Anwendung
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 .
Wenn du uns nicht sagen kannst, womit du arbeitest, wird dir auch der beste Programmierer nicht helfen können.
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
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).
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
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
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?
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
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?
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
Bitte beachte [Hinweis] Wie poste ich richtig?
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... 😄
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.
Sir Rufo,
arbeite mit einer feste Array, meins ist nicht fest, könnte jedes Moment durch der Benutzer geändert werden
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... 😄
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
🤔
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.
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.
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;
}
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. =)
Hallo Henri,
beschäftige dich bitte mit DataBinding und MVVM.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck