2012-04-11 6 views
2

MVVMパターンを使用してRibbonComboBoxSelectedItemを設定するにはどうすればよいですか?MVVMを使用してRibbonComboBoxでSelectedItemを設定する方法は?

ビュー

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

のViewModel

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

更新

RibbonComboBoxで "Namespace.Foobar" を入れて、012を変更しないIsEditable="True"を削除しますとRibbonGallerySelectedValuePathを追加すると正しい値が表示されますが、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); 
} 
関連する問題