Frage

Ich weiß, dass ich in ASP.NET mithilfe von ein Element aus einer DropDownList abrufen kann

DropDownList1.Items.FindByText

Gibt es eine ähnliche Methode, die ich in WPF für eine ComboBox verwenden kann?

Hier ist das Szenario.

Ich habe eine Tabelle namens RestrictionFormat, die eine Spalte namens RestrictionType enthält. Der Typ ist ein Fremdschlüssel für eine Tabelle, die diese Werte speichert.

Wenn der Benutzer in meiner Editor-Anwendung das RestrictionFormat aus einer ComboBox auswählt (das funktioniert einwandfrei), rufe ich die Details zur Bearbeitung auf.Ich verwende eine zweite ComboBox, um sicherzustellen, dass der Benutzer beim Bearbeiten nur einen RestrictionType auswählt.Ich habe bereits die zweite Combobox-gebundene Eigenschaft aus der RestrictionType-Tabelle, muss aber den ausgewählten Index darauf ändern, damit er mit dem im Datensatz angegebenen Wert übereinstimmt.


Hier ist das Szenario.

Ich habe eine Tabelle namens RestrictionFormat, die eine Spalte namens RestrictionType enthält. Der Typ ist ein Fremdschlüssel für eine Tabelle, die diese Werte speichert.

Wenn der Benutzer in meiner Editor-Anwendung das RestrictionFormat aus einer ComboBox auswählt (das funktioniert einwandfrei), rufe ich die Details zur Bearbeitung auf.Ich verwende eine zweite ComboBox, um sicherzustellen, dass der Benutzer beim Bearbeiten nur einen RestrictionType auswählt.Ich habe bereits die zweite Combobox-gebundene Eigenschaft aus der RestrictionType-Tabelle, muss aber den ausgewählten Index darauf ändern, damit er mit dem im Datensatz angegebenen Wert übereinstimmt.

Macht das Sinn?

War es hilfreich?

Lösung

Können Sie ItemContainerGenerator verwenden?

ItemContainerGenerator enthält eine ContainerFromItem-Methode, die einen Objektparameter entgegennimmt.Wenn Sie einen Verweis auf das vollständige Objekt haben, das Ihre ComboBox enthält (oder eine Möglichkeit, es zu rekonstruieren), können Sie Folgendes verwenden:

ComboBoxItem item = 
    (ComboBoxItem)myComboBox.ItemContainerGenerator.ContainerFromItem(myObject);

Andere Tipps

In WPF können Sie die FindName-Methode verwenden.

XAML:

    <ComboBox Name="combo">
        <ComboBoxItem Name="item1" >1</ComboBoxItem>
        <ComboBoxItem Name="item2">2</ComboBoxItem>
        <ComboBoxItem Name="item3">3</ComboBoxItem>
    </ComboBox>

Code-Behind-Datei

   item1.Content = "New content"; // Reference combo box item by name
   ComboBoxItem item = (ComboBoxItem)this.combo.FindName("item1"); // Using FindName method

Um ein Element anhand seines Inhalts zu finden, können Sie Folgendes verwenden: UI-Automatisierung.

Anstatt zu versuchen, den SelectedIndex zu binden, warum binden Sie nicht einfach das SelectedItem in der ComboBox an den Wert im Datensatz?

Mit anderen Worten: Setzen Sie den DataContext der ComboBox (oder ihres übergeordneten Elements) auf den ausgewählten „Datensatz“ und binden Sie das SelectedItem in der ComboBox an eine verfügbar gemachte Eigenschaft im „Datensatz“.

Es kann hilfreich sein, wenn Sie einige Codeausschnitte oder zusätzliche Details bereitstellen könnten, damit die Antworten spezifischer sein können und sich auf die Variablen und Typen beziehen, die Sie sowohl im Quelldatensatz als auch in der von Ihnen ausgefüllten ComboBox verwenden.

Sie können Combobox-Elemente auf zwei Arten abrufen:

Nach Artikel:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromItem(control.SelectedItem);

Nach Index:

ComboBoxItem item = (ComboBoxItem) control.ItemContainerGenerator.ContainerFromIndex(1);

Können Sie einen Kontext dazu angeben, was genau Sie tun möchten?

Welche Objekte fügen Sie in Ihre Combobox ein und mit welcher Methode?(Setzen Sie die ElementSource -Eigenschaft fest oder binden Sie?) Warum müssen Sie einen Artikel nach seinem "Text" suchen?Die häufigste Verwendung in WPF besteht darin, die SelectedItem-Eigenschaft an etwas anderes zu binden, damit Sie den ausgewählten Eintrag mithilfe Ihrer Darstellung abrufen/festlegen können.Gibt es eine bestimmte Anforderung, für die Sie einen bestimmten Artikel in der Liste finden müssen?

Im schlimmsten Fall können Sie die Suche in der Sammlung durchführen, an die Sie Ihre ComboBox mithilfe von Linq To Objects binden.

Verwechseln Sie nicht das ComboBoxItem (d. h. das Element, das WPF im Hintergrund für Sie generiert, wenn Sie ItemsSource binden) mit dem SelectedItem, dem tatsächlichen Objekt in der Sammlung, an die Sie binden.Dies ist normalerweise die Ursache der meisten Probleme mit WPF, wenn Sie nicht daran gewöhnt sind.Es gibt nur wenige Fälle, in denen Sie das tatsächliche ComboBoxItem finden müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top