2012-04-11 11 views
2

Wie stelle ich die SelectedItem auf eine RibbonComboBox mit MVVM Muster?Wie legte ich SelectedItem für eine RibbonComboBox mit MVVM fest?

Ansicht

<ribbon:RibbonComboBox> 
    <ribbon:RibbonGallery SelectedItem="{Binding Foobar, Mode=TwoWay}"> 
     <ribbon:RibbonGalleryCategory ItemsSource="{Binding Foobars}" DisplayMemberPath="FoobarID" /> 
    </ribbon:RibbonGallery> 
</ribbon:RibbonComboBox> 

Ansichtsmodell

// Selected Item 
private Foobar _foobar { get; set; } 

public Foobar Foobar 
{ 
    get { return _foobar; } 
    set 
    { 
     if (value == _foobar || value == null) 
      return; 

     _foobar = value; 

     base.NotifyPropertyChanged("Foobar"); 
    } 
} 

// Collection 
private ObservableCollection<Foobar> _foobars = new ObservableCollection<Foobar>(); 

public ObservableCollection<Foobar> Foobars 
{ 
    get 
    { 
     return _foobars; 
    } 
} 

// Constructor 
public FoobarViewModel(MyObject myObject) 
{ 
    LoadFoobars(); 

    Foobar = myObject.Foobar; 
} 

// Method 
private void LoadFoobars() 
{ 
    foreach (var foobar in _localRepository.GetFoobars()) 
    { 
     this._foobars.Add(foobar); 
    } 
} 

aktualisieren

IsEditable="True" Entfernen bedeutet "Namespace.Foobar" setzen in der RibbonComboBox und 012 zu ändernund Hinzufügen SelectedValuePath auf der RibbonGallery zeigt den richtigen Wert, aber die RibbonComboBox hat einen roten Rand, also denke ich, es ist nicht validiert (wie Äpfel und Birnen vergleichen).

<ribbon:RibbonComboBox> 
    <ribbon:RibbonGallery SelectedItem="{Binding Foobar.FoobarID, Mode=TwoWay}" SelectedValuePath="DisplayMemberPath"> 
     <ribbon:RibbonGalleryCategory ItemsSource="{Binding Foobars}" DisplayMemberPath="FoobarID"/> 
    </ribbon:RibbonGallery> 
</ribbon:RibbonComboBox> 

Antwort

1

Ich löste es durch Ändern des Konstruktors.

// Constructor 
public FoobarViewModel(MyObject myObject) 
{ 
    LoadFoobars(); 

    Foobar = _repository.GetFoobar(myObject.FoobarID); 
} 
Verwandte Themen