2011-10-23 9 views
9

私はいくつかのWinformオブジェクトをカスタムクラス、具体的にはコード内のフォームに追加したカスタムクラスのインスタンスにバインドしようとしています。 C#、.NET 2010 Express。例えばWinformsデータをカスタムクラスにバインドする

、ここではクラスの断片であり、そして今UserInfoForm

public class UserInfo 
{ 
    [XmlAttribute] 
    public string name = "DefaultName"; 

    [XmlAttribute] 
    public bool showTutorial = true; 

    [XmlAttribute] 
    public enum onCloseEvent = LastWindowClosedEvent.Exit; 
} 

public enum LastWindowClosedEvent 
{ 
    MainMenu, 
    Exit, 
    RunInBackground 
} 


public partial class Form1 : Form 
{ 
    UserInfo userToBind = new UserInfo(); 

    TextBox TB_userName = new TextBox(); 
    CheckBox CB_showTutorial = new CheckBox(); 
    ComboBox DDB_onCloseEvent = new ComboBox(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 
} 

、私はuserToBindで、それぞれの値にこれらのフォームコントロールの値をバインドしたいのですが、運がなかったしています。私が見つけることができるすべてのチュートリアルは、古くなった(2002年)、またはデータセットまたは他のタイプのデータベースにコントロールをバインドすることに関するものです。

私は明らかに何かを見落としていますが、私は何を理解していません。

あなたが共有できる情報をありがとうございました。

詳細情報:UserInfoはXMLに対応するように設計されているため、ユーザープロファイルとして保存することができます。 UserInfoには他のカスタムXMLクラスが含まれ、UserInfoの下にすべてネストされています。多くのコントロールはこれらの子クラスにアクセスすればよいだけです。

答えて

16

コントロール(テキストボックス、チェックボックス...)のDataBindingsプロパティを使用して、特定のコントロールにバインディングを追加できます。例えば:

public Form1() 
{ 
    InitializeComponent(); 
    TB_userName.DataBindings.Add("Text", userToBind, "name"); 
} 

はまた、IIRC、データバインディングはproperties上で動作しますので、あなたが最初にそれに応じてUserInfoクラスを変更する必要があります。さらに、コードでオブジェクトを変更するときにUIが自動的に更新されるようにするには、カスタムクラスにINotifyPropertyChangedを実装する必要があります。

+3

私はまた、プロパティが公開される必要があることを発見しました。内部は私のためには機能しませんでした。 – RichieACC

関連する問題