Data Binding met een enum

Status
Niet open voor verdere reacties.

HelpElec

Gebruiker
Lid geworden
6 mrt 2013
Berichten
102
Beste allemaal,

Ik heb een applicatie met 3 modes, waartussen geschakeld kan worden door de gebruiker. Afhankelijk van de gekozen mode moet hij bijvoorbeeld een button wel of niet laten zien. Voor de modes heb ik een enum gemaakt. M'n vraag is, hoe kan ik een property van het type Modes koppelen aan de Visible van een button?
Ik zag op internet voorbeelden met een Format- en Parse-event, maar ik krijg die niet werkend. Iemand een idee?

Code:
public partial class Form1 : Form, INotifyPropertyChanged
{
public Form1()
{
InitializeComponent();
Init_DataBinding();
}
public enum Modes
        {
            Control,
            Monitor,
            ControlandMonitor,
        }

public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
private BindingSource BndSrc; 
private Modes _Mode = Modes.Control;
public Modes Mode
{
get
{
return _Mode;
}
set
{
_Mode = value;
OnPropertyChanged("Mode_Changed");
}

}
private void Init_DataBinding()
{
//Init Databinding
            BndSrc = new BindingSource();
            BndSrc.DataSource = typeof(Form1);
            BndSrc.Add(this);

Button1.DataBindings.Add("Visible", BndSrc, "Mode", true, DataSourceUpdateMode.OnPropertyChanged);
}
}
 
Als je een int bind aan een combobox en de selected index gebruikt kun je deze omzetten naar de Mode enum

[CPP]public enum Mode
{
Control = 0,
Monitor = 1,
ControlAndMonitor = 2,
}[/CPP]

[CPP]private int _selectedValue;

public int SelectedValue
{
get { return _selectedValue; }
set
{
_selectedValue = value;
OnPropertyChanged("SelectedValue")
OnPropertyChanged("SelectedMode")
}
}
public Mode SelectedMode
{
get { return (Mode)SelectedValue; }
}[/CPP]



In WPF zit zoiets als een IValueConverter om dit soort dingen te doen, ik weet niet of er zoiets in WinForms zat. WPF heeft binding allemaal ingebakken in het framework, als je geen WinForms hoeft te gebruiken raad ik WPF zeer aan.
 
Hallo Bloodshed,

Bedankt voor je reactie. Door een extra property te maken zou ik de Visible property van de Button wellicht beter in de setter kunnen beheren:

Code:
public Mode SelectedMode
{
    get { return _SelectedMode }
    set
    { 
       _SelectedMode = value;
       switch(_SelectedMode)
       {
             case Mode.Control:
                  Button1.Visible = true;
                  break;
             default:
                    Button1.Visible = false;
                  break;
       }
    }
}

WinForms is geen must, maar ik ken WPF niet zo goed. Weet je nog goede tutorial?

Bedankt!
 
Het is even wennen maar xaml UI is nu wel standaard en daarna wil je niet meer terug naar winforms.

Ik weet zo geen standaard wpf tutorial maar youtube/ microsoft virtual academy staat vol met allerlei resources. (vaak ook met win8+ apps maar het concept met xaml blijft hetzelfde)
Dit is wel een goede korte uitleg: https://youtu.be/cB7KdYPQw1k
MVVM is wel iets wat je wilt gebruiken in wpf/win8+/winphone

Ik zou gewoon eens dingen proberen stap voor stap je programma ook in WPF maken naast je winforms (je code is gewoon te hergebruiken)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan