CheckBox - wiązanie dwukierunkowe.

0

Witam.

Czy w WindowsForms da się zrobić wiązanie dwukierunkowe z CheckBoxem?

Chce wrzucić na formę kilka CheckBoxów i powiązać je ze zmiennymi w ten sposób, aby w chwili zmiany wartości właściwości zmieniał się również stan kontrolek (pojawiał się/znikał "ptaszek").

O ile w drugą stronę (na podstawie kliknięć użytkownika zmieniać wartość właściwości) nie ma problemu, to coś takiego mi nie wychodzi...

0

no masz w c# takie coś jak akcesory i do tego to właśnie służy żeby zrobić coś
przy okazji samej zmiany wartości zmiennej. Piszesz sobie np.:

public bool Zmienna1
{
	get
	{
		return _Zmienna1;
	}
	set
	{
		checkBox1.Checked = value;
		_Zmienna1 = value;
	}
}
0
Tobiasz Stamborski napisał(a):

no masz w c# takie coś jak akcesory i do tego to właśnie służy żeby zrobić coś
przy okazji samej zmiany wartości zmiennej. Piszesz sobie np.:

public bool Zmienna1
{
	get
	{
		return _Zmienna1;
	}
	set
	{
		checkBox1.Checked = value;
		_Zmienna1 = value;
	}
}
  1. Niekoniecznie to ładne, z Modelu zygać do GUI

  2. Warto dać aplikacji troszkę czasu na odświeżenie widgetów
    Application.DoEvents()

  3. Żeby nie gwałcić GUI z Modelu, a zrobić to ładnie, klasę Modelu się z czegoś dziedziczyło, a na property dawało atrybut chyba z grupy ComponentModel. powodowało to, że GUI było "bardziej zainteresowane" śledzeniem zmian na właściwościach.
    Niestey na kolanie sobie nie przypomnę. Jak mnie oświeci, to dopiszę.

1

Wszyscy od razu zaatakowali gościa MVVM, bo tak się powinno robić, a autorowi chodzi o zwykły refresh kontrolek :D Przykład z głowy:

//Przykładowa klasa

class MojObiekt 
{
	public bool Wartosc1 {get;set}
	public bool Wartosc2 {get;set;}
}

// Robisz sobie metodę, która po każdej zmianie obiektu odświeża GUI

public void RefreshGUI(MojObiekt obiekt)
{
	checkBox1.Checked = obiekt.Wartosc1;
	checkBox2.Checked = obiekt.Wartosc2;
}

To jest tragiczne rozwiązanie, ale wnoszę, że właśnie o to chodziło. W momencie kiedy będziesz zmieniał w kodzie wartość obiektu wywołujesz RefreshGUI(mojObjekt). Oczywiście nazewnictwo musisz dopasować do siebie. Nawet ciężko wywnioskować do czego takie coś się przyda, ale nie drążę ;-)

1

Twoje GUI musi wiedzieć o tym że properta została zmieniona i wywołać reakcje na to zdarzenie.
W twoim wypadku będzie to zaptaszenie/odptaszenie checkboxa
aby to zrobić należy do zmiany prop dowiązać Interfejs INotifypropertyChanged
Guide od M$ :)
https://docs.microsoft.com/pl-pl/dotnet/desktop/wpf/data/how-to-implement-property-change-notification?view=netframeworkdesktop-4.8

ew. SO
https://stackoverflow.com/questions/18835232/updating-ui-based-on-property-change-in-a-view-model

0

@Kardasz dziękuję bardzo - dokładnie o to chodziło. Działa jak należy :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1