Annuler zone de liste déroulante de sélection en WPF avec MVVM

J'ai une zone de liste déroulante dans mon application WPF:

<ComboBox  ItemsSource="{Binding CompetitorBrands}" DisplayMemberPath="Value" 
   SelectedValuePath="Key" SelectedValue="{Binding Path=CompMfgBrandID, Mode=TwoWay,
   UpdateSourceTrigger=PropertyChanged}" Text="{Binding CompMFGText}"/>

Lié à une collection de KeyValuePair<string, string>

Ici est la CompMfgBrandID bien dans mon ViewModel:

public string CompMfgBrandID
{
    get { return _compMFG; }
    set
    {    
        if (StockToExchange != null && StockToExchange.Where(x => !string.IsNullOrEmpty(x.EnteredPartNumber)).Count() > 0)
        {
            var dr = MessageBox.Show("Changing the competitor manufacturer will remove all entered parts from the transaction.  Proceed?",
                "Transaction Type", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (dr != DialogResult.Yes)
                return;
        }

        _compMFG = value;
        StockToExchange.Clear();

        ...a bunch of other functions that don't get called when you click 'No'...
        OnPropertyChanged("CompMfgBrandID");
    }
}

Si vous choisissez "oui", il se comporte comme prévu. Les effets sont compensés et les autres fonctions sont appelées. Si je choisis "Non", elle se retourne et ne pas effacer de ma liste ou d'appeler des autres fonctions, ce qui est bon, mais la zone de liste déroulante affiche toujours de la nouvelle sélection. J'en ai besoin pour revenir à la sélection d'origine, comme si rien n'avait changé, lorsque l'utilisateur sélectionne "Non". Comment puis-je accomplir? J'ai aussi essayé d'ajouter e.Handled = true dans le code-behind, en vain.

  • Mettre GUI à l'intérieur d'une propriété setter est une mauvaise idée. Surtout dans MVVM.
  • Je recommande considérant ayant la propriété setter ou une propriété d'événements de changement de causer un message publié, et l'effet de levier le médiateur modèle pour gérer l'affichage de la boîte de dialogue de l'INTERFACE utilisateur. Boîte de dialogue de sélection serait alors publiez un message de réponse de votre modèle de vue du médiateur est à l'écoute pour.
  • double possible de Comment la restauration sélectionné SelectedValue de la zone de liste modifiable à l'aide de WPF MVVM
  • Notez que le problème peut être fait pour aller si vous pouvez modifier le code pour utiliser SelectedItem plutôt que SelectedValue. Clairement, ce n'est pas un droit de swap, si vous avez besoin d'appliquer une certaine pensée.
InformationsquelleAutor drowned | 2011-10-17