オブジェクトのコレクションにデータバインドされたリストボックスがあります。これらのオブジェクトのどれがプログラムの START オブジェクトであるかをユーザーに示すために、項目の表示方法を変更したいと考えています。
これを次の方法で実行しようとしましたが、リストボックスが自動的に更新されません。コントロールの無効化も機能しませんでした。
私が見つけることができる唯一の方法は、データバインディングを完全に削除して再度追加することです。しかし、私の場合、それは望ましくありません。
別の方法はありますか?
class Person : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
public string Name
{
get
{
if (PersonManager.Instance.StartPerson == this)
return _name + " (Start)";
return _name;
}
set
{
_name = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
public Person(string name)
{
Name = name;
}
}
リストとスタートとなるアイテムを管理するクラスです
class PersonManager
{
public BindingList<Person> persons { get; set; }
public Person StartPerson { get; set; }
private static PersonManager _instance;
public static PersonManager Instance
{
get
{
if (_instance == null)
{
_instance = new PersonManager();
}
return _instance;
}
}
private PersonManager()
{
persons = new BindingList<Person>();
}
}
フォームでは、次のコードを使用します
private void button1_Click(object sender, EventArgs e)
{
PersonManager.Instance.StartPerson = (Person)listBox1.SelectedItem;
}