2016-12-26 13 views
0

名前のリストを含むComboBoxがあります:LastName + ", " + FirstNameComboBox内の1つの項目のテキストを変更する

名前を選択すると、2つのテキストボックスにそれぞれ名と姓が入力されます。

私がやっていることは、テキストボックスで名前が変更された場合、変更内容をコンボボックスにも更新して、全体をリロードする必要がないことです。私のコンボボックスはデータベースから直接ロードされないので使用できませんRefreshItem()

これは可能ですか?

+2

はい、そうです。あなたのコンボボックスはどのように埋め込みますか? – Fjut

+0

私は、私が入力したViewModelを使用し、それをDataSourceとして設定します。これには、インデックスのintおよびdisplaymemberの文字列が含まれます。私は、さまざまなソースからの情報をテキストとして連結し、コンボボックスのDisplayMember、ValueMember、およびDataSourceを割り当てる規則を使用してデータを設定します。 –

+0

これはあなたが探しているものだと思いますhttp://stackoverflow.com/questions/1064109/dynamically- – Fjut

答えて

1

INotifyPropertyChangedインターフェイスを実装し、ComboBoxのDataContextとしてBindingSourceを使用できます。次のサンプルコードを参照してください。

Person.cs:

public class Person : INotifyPropertyChanged 
{ 
    private string _firstName; 
    public string FirstName 
    { 
     get { return _firstName; } 
     set { _firstName = value; NotifyPropertyChanged(); } 
    } 

    private string _lastName; 
    public string LastName 
    { 
     get { return _lastName; } 
     set { _lastName = value; NotifyPropertyChanged(); } 
    } 

    public string FullName { get { return LastName + ", " + FirstName; } } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

のForm1.cs:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     List<Person> people = new List<Person>() 
      { 
       new Person() { FirstName = "Donald", LastName = "Duck" }, 
       new Person() { FirstName = "Mickey", LastName = "Mouse" } 
      }; 
     BindingSource bs = new BindingSource(); 
     bs.DataSource = people; 
     comboBox1.DataSource = bs; 
     comboBox1.DisplayMember = "FullName"; 

     textBox1.DataBindings.Add(new Binding("Text", bs, "FirstName", false, DataSourceUpdateMode.OnPropertyChanged)); 
     textBox2.DataBindings.Add(new Binding("Text", bs, "LastName", false, DataSourceUpdateMode.OnPropertyChanged)); 

    } 
} 
関連する問題