2012-04-11 78 views
2

如何使用MVVM模式將SelectedItem設置爲RibbonComboBox如何使用MVVM在RibbonComboBox上設置SelectedItem?

查看

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

視圖模型

// 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); 
    } 
} 

更新

刪除IsEditable="True"並把 「Namespace.Foobar」 在RibbonComboBox並改變SelectedItem並在RibbonGallery上增加SelectedValuePath確實顯示正確的值,但RibbonComboBox有一個紅色邊框,所以我猜測它沒有驗證(如比較蘋果和梨)。

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

回答

1

我通過改變構造函數來解決它。

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

    Foobar = _repository.GetFoobar(myObject.FoobarID); 
} 
相關問題