2017-06-14 13 views
0

データバインドコンボボックスSelectedValueの

comboBox1.DataSource = _team; 
comboBox1.DisplayMember = "Name"; 
comboBox1.ValueMember = "ID"; 

チームのように見えるタイプListItemModelの一般的なリストである:

public class ListItemModel 
{ 
    private string _name; 
    private short _id; 
    public string Name 
    { 
     get 
     { 
      return this._name; 
     } 
    } 
    public short ID 
    { 
     get 
     { 
      return this._id; 
     } 
    } 
    public ListItemModel(string name, short id) 
    { 
     this._name = name; 
     this._id = id; 
    } 
} 

私はその後、としてそれをdatabingしようとしていますこうした:

comboBox1.DataBindings.Add("SelectedValue", _person.Person, "TeamId", true, DataSourceUpdateMode.OnPropertyChanged); 

マイデータソース(モデル)が設定されている。

public class PersonViewModel : INotifyPropertyChanged 
{ 
    public Person Person { get; set; } 
    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) handler(this, e); 
    } 
} 

コンボボックスに正しくデータを設定できますが、データが正しく変更されているのがわかるため、OnPropertyChangedイベントが実際に機能しています。私はそれをデータバインドしているにもかかわらず、

1)初期ロードオン/コンボボックスのSelectedValueのが設定されていない設定:

問題が2倍です。

2)コンボボックスの選択を変更してフォーカスを失うと、選択した値が保持されず、選択されていないことが示されます。 TeamIdが正しく変更されているのが分かるので、OnPropertyChangedが機能しています。

私はそれがこの上で一日中過ごし、コンボボックスは、それが簡単な解決策になってしまったデータをバインドする方法を掘り下げる後データバインディングコンボボックス

+0

"Person"クラスのコードを表示できますか? – Bahrom

答えて

0

に来るとき、私は逃したものを疑問に思って。

私はpublic class ListItemModelのIdプロパティをshortからintに変更して値を正しくバインドして選択しました。

データバインディングが発生し、SelectedValueプロパティが正しく設定されました。データバインディングが常に正しいことに注意してください。この後、DisplayMemberおよびValueMemberバインディングが起動し、SelectedValueを再度チェックします。 ValueMemberはint型ではなくshort型です。このため、一致しないためnullに設定します。

どのように例外もエラーもなく、ただ静かにnullになります。

これは、この問題を抱えている他の誰かにも役に立ちます。

関連する問題