2016-05-13 3 views
0

In meiner WPF-Anwendung habe ich ein Kombinationsfeld. Es bindet Daten nach MVVM-Entwurfsmuster. Es funktioniert gut.Festlegen des Werts Wenn das Kombinationsfeld den Wert in WPF nicht ändert MVVM-Muster

enter image description here

Im XAML

<ComboBox x:Name="comboBox1" ItemsSource="{Binding ValetType}" DisplayMemberPath="Name" 
     SelectedItem="{Binding SelectedItemValet, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True"/> 

Im Ansichtsmodell

valetTypes = GetValueForValet(); 
public ObservableCollection<Valet> ValetType 
{ 
    get { return valetTypes; } 
    set { valetTypes = value; NotifyPropertyChanged("ValetType"); } 
} 

public Valet SelectedItemValet 
{ 
    get { return selectedItemValet;} 
    set { selectedItemValet = value; NotifyPropertyChanged("SelectedItemValet"); } 
} 

Eines der Probleme, die ich Gesicht ist, dass, wenn ich bindet nicht das Kombinationsfeld Wert ändern es null, sonst bindet es. Ich setze IsSynchronizedWithCurrentItem als "true" fest und teilt einem Selector mit, dass das SelectedItem mit dem aktuellen Element synchronisiert werden soll. Aber würde nicht funktionieren. Wie könnte ich das tun? Ich bin neu bei WPF MVVM.

+0

Wenn Sie einen Standardwert in Ihrem SelectedItemValet wollen, müssen Sie es einrichten, entweder in Ihrem Ansichtsmodell oder in Ihrem XAML: in XAML, setzen Sie SelectedIndex to 0, in cs set selectedItemValet auf etwas setzen – nkoniishvt

+0

In Ihrem ViewModel, nach dem Laden von 'ValetType', tun Sie etwas wie' this.SelectedItemValet = ValetType.FirstOrDefault(); ' – Pikoh

+0

Comb-Box zeigt keine ausgewählten Artikel –

Antwort

2

You've bekam ein Problem in Ihrem Code festlegen:

public ValetServices SelectedItemValet 
{ 
    get { return selectedItemValet;} 
    set { selectedItemValet = value; NotifyPropertyChanged("SelectedItemValet"); } 
} 

ValetType ist Typ Valet, aber SelectedItemValet ist Typ ValetServices. Sie sollten übereinstimmen. Danach ändern, das erste Element zum Beispiel zu wählen, dies tun:

valetTypes = GetValueForValet(); 
this.SelectedItemValet=ValetType.FirstOrDefault(); 
+0

Es war ein Fehler von Ich, Es ist Valet nicht ValetService, Es ist aktualisiert. –

+0

Ok..wenn Sie einen Haltepunkt in den SelectedItemValet-Setter setzen und einen Wert in Ihrer Combo auswählen, trifft er den Haltepunkt? @SanjeevS – Pikoh

+0

Nein, es trifft nicht –

2

Die einfache Lösung wäre, einen Standardwert für Ihre SelectedItemValet bereitzustellen.

In einigen Verfahren Ihrer Ansichtsmodell, das aufgerufen wird, wenn Sie Viewmodel (in der Regel den Konstruktor) initialisiert wird Sie SelectedItemValet dem Wert möchten Sie

Verwandte Themen