2011-10-23 14 views
9

Próbuję powiązać niektóre obiekty Winform z niestandardową klasą, a konkretniej z instancją mojej niestandardowej klasy, którą dodałem do formularza w kodzie. C#, .NET 2010 Express.Wiązanie danych WinForm do niestandardowej klasy

Na przykład, oto fragment tej klasy, a 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(); 
    } 
} 

Teraz chciałbym związać wartości tych pól formularza do ich wartości w userToBind, ale nie miał szczęścia . Wszystkie samouczki, które mogę znaleźć, są albo przestarzałe (2002), albo wiążące kontrole do zbioru danych lub innego typu bazy danych.

Oczywiście coś przeoczyłem, ale nie wiem, co.

Dziękuję bardzo za wszelkie informacje, które można udostępniać.

Więcej informacji: UserInfo został zaprojektowany jako przyjazny dla XML, więc można go zapisać jako profil użytkownika. UserInfo będzie zawierać inne niestandardowe klasy XML, wszystkie zagnieżdżone w UserInfo, a wiele formantów będzie potrzebować dostępu tylko do tych klas potomnych.

Odpowiedz

16

Możesz użyć właściwości DataBindings swoich kontrolek (pole tekstowe, pole wyboru ...), aby dodać powiązanie do określonej kontrolki. Na przykład:

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

Również IIRC, wiązania danych działa tylko na properties, więc musisz najpierw zmodyfikować klasę UserInfo odpowiednio. Co więcej, jeśli chcesz, aby interfejs użytkownika aktualizował się automatycznie podczas modyfikowania obiektów w kodzie, musisz wdrożyć INotifyPropertyChanged w swoich klasach niestandardowych.

+3

Stwierdziłem również, że właściwości muszą być publiczne, wewnętrzne nie działa dla mnie. – RichieACC

Powiązane problemy