2016-05-04 24 views
0

静的コンボボックスのアイテムがあります。ModelViewでComboBox選択項目を設定する方法は?

<ComboBox x:Name="comboBox" SelectedItem="{Binding MySelectedItem}" HorizontalAlignment="Left" Margin="58,7,0,0" VerticalAlignment="Top" Width="120"> 
     <ComboBoxItem Name="cbi1">Item 1</ComboBoxItem> 
     <ComboBoxItem Name="cbi2">Item 2</ComboBoxItem> 
     <ComboBoxItem Name="cbi3">Item 3</ComboBoxItem> 
    </ComboBox> 

モデルビュー:?私はNameを持つコンボボックスの項目を選択設定することができますどのように

// How to set initial value here or in constructor? 
    private ComboBoxItem _mySelectedItem; 
    public ComboBoxItem MySelectedItem 
    { 
     get 
     { 
      return _mySelectedItem; 
     } 
     set 
     { 
      Console.WriteLine("Value = {0}", (value as ComboBoxItem).Name); 
     } 
    } 

このように私のXAMLの外観永続ストレージから読み込んだ後、MVコンストラクタで選択した項目を設定したいと思います。

+0

あなたキャンをViewModelにからあなたのコレクションを作成する必要がありますそれはしない。 ComboBoxItemは参照型で、ViewModelではComboBoxアイテムの参照を取得できません – Amine

+0

そうでない場合、SelectedItemの代わりにSelectedIndexを使用できます – Amine

+0

SelectedIndexが機能しましたが、これは最善の解決策ではありません。 SelectedItemを動作させるには、私が理解しているように、ViewModelからComboBoxアイテムを作成して塗りつぶす必要がありますか?あなたがどのように知っていれば、あなたの答えは高く評価されます。 – Pablo

答えて

2

あなたが追加する必要があるものは、SelectedValuePath = "名前"をコンボボックスに追加したものです。次にViewModelコンストラクタで、このようなスタートアップアイテムを追加します。あなたのケースでComboBoxItemとして持っている必要があるかどうかわからない、私はSelectedDropDownプロパティを文字列にしました。

public MainFormViewModel() 
    { 
     SelectedDropDown = "cbi1"; 
    } 
private string _SelectedDropDown; 
    public string SelectedDropDown 
    { 
     get { return _SelectedDropDown; } 
     set { _SelectedDropDown = value; NotifyPropertyChanged("SelectedDropDown"); } 
    } 

ここではComboBox Codeがテストされており、正常に動作します。

<ComboBox x:Name="comboBox1" HorizontalAlignment="Left" Margin="114,213,0,0" SelectedValuePath="Name" SelectedValue="{Binding SelectedDropDown }" VerticalAlignment="Top" Width="120" Grid.Column="1"> 
      <ComboBoxItem Name="cbi1">Item 1</ComboBoxItem> 
      <ComboBoxItem Name="cbi2">Item 2</ComboBoxItem> 
      <ComboBoxItem Name="cbi3">Item 3</ComboBoxItem> 
     </ComboBox> 
0

あなたは*のSelectedItem

を使用するためにの.xaml(ビュー)

<ComboBox x:Name="comboBox" SelectedValue="{Binding MySelectedItem, Mode=TwoWay}" ItemsSource="{Binding MyCollection}" Height="25"/> 

* .csファイル(ViewModelに)

public class MainViewModel : INotifyPropertyChanged 
{ 
    public MainViewModel() 
    { 
     for (int i = 0; i < 10; i++) 
     { 
      MyCollection.Add("Item " + i); 
     } 
     MySelectedItem = "Item 2"; 
    } 


    private ObservableCollection<string> myCollection = new ObservableCollection<string>(); 

    public ObservableCollection<string> MyCollection 
    { 
     get 
     { 
      return myCollection; 
     } 
     set 
     { 
      myCollection = value; 
      NotifyPropertyChanged("MyCollection"); 
     } 
    } 


    private string _mySelectedItem; 
    public string MySelectedItem 
    { 
     get 
     { 
      return _mySelectedItem; 
     } 
     set 
     { 
      _mySelectedItem = value; 
      NotifyPropertyChanged("MySelectedItem"); 
     } 
    } 

    //NotifyPropertyChanged 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 
} 
関連する問題