Gewusst wie: Databind SelectedItem von RibbonComboBox

8

Meine Frage ist im Grunde diese . Ich dachte, es würde helfen, mehr Informationen und Code zur Verfügung zu stellen, der es einfacher macht, das Problem zu reproduzieren, obwohl.

Das Arbeiten mit der Microsoft.Windows.Controls.Ribbon.RibbonComboBox aus der RibbonControlsLibrary fühlt sich an wie Ich laufe durch einen großen Sumpf voller Käfer, nicht etwas, das du tust, wenn du einen Weg um sie herum kennst.

Anywho. Das größte Problem, auf das ich stieß, war die Datenbindung mit SelectedItem.

Nachstehend habe ich angefangen (nachdem ich von RibbonGallery erfahren habe? ). ItemsSource und SelectedItem auf Unterelementen der ComboBox und nicht einmal auf dem gleichen Level zu haben gab mir schon die heebie-jeebies, aber das scheint richtig zu sein.

In der Beispiel-App setze ich das SelectedItem im Konstruktor des ViewModels. Beim Ausführen der App wird jedoch kein SelectedItem angezeigt. Sogar der VS-Designer zeigt "zweite Option" korrekt an!

Laufende App: VS-Designer:

Beim Debuggen des SelectedItem-Setter werden Sie mehrere Pässe bemerken. Nachdem es das erste Mal auf "zweite Option" im ctor gesetzt wurde (1, siehe Debugprotokoll unten), wird es auf null (2) zurückgesetzt (nach externem Code rechne ich mit dem Steuerelement selbst). Wenn Sie das Dropdown-Menü in der Benutzeroberfläche öffnen, wird es wieder auf Null gesetzt (3), und wenn Sie einen Wert auswählen, wird dieser Wert zweimal auf 4,5 gesetzt. Ich wählte "zweite Option" und wiederholte dann die Prozedur mit "erste Option" (6-9). Dies ergab das folgende Protokoll (Ignorieren die tausend und eine Bindung Ausnahmen vom Ribbon-Steuerelement ...):

Das große Problem ist offensichtlich (2), das meine anfängliche Auswahl zurücksetzt. Sieht so aus, als wenn das Steuerelement das erste Mal angezeigt wird, wird es zurückgesetzt. Ein sehr hässlicher Workaround wäre, den Wert durch einen Timer zu setzen. Die Einstellung im Loaded-Ereignis des Benutzersteuerelements funktioniert für mich in dieser Beispiel-App, in meiner schwereren Real-Life-App jedoch nicht. Jedenfalls fühlt sich das alles falsch an. Kennt jemand eine bessere Lösung?

Xaml:

%Vor%

ViewModel:

%Vor%     
Mike Fuchs 21.03.2013, 18:34
quelle

2 Antworten

5

Während das geladene View / UserControl-Ereignis auftritt, bevor ComboBox SelectedItem in meiner Anwendung auf null zurückgesetzt wird, wird das geladene ComboBox-Ereignis tatsächlich zweimal ausgelöst, das zweite Mal "spät" genug. Meine derzeitige Lösung, die ich gerne für eine bessere aufgeben werde, ist dies:

%Vor%

ViewModel:

%Vor%     
Mike Fuchs 22.03.2013 10:14
quelle
2

Ich habe am Ende nur die Standard-ComboBox verwendet.

%Vor%

Wenn Sie denselben (sehr ähnlichen) Stil wie RibbonComboBox haben möchten, verwenden Sie

%Vor%     
Nick Strupat 22.05.2013 15:03
quelle