2017-06-07 10 views
0

Ich versuche, ein Kontrollkästchen an eine Unterklasse meiner ViewModel-Klasse zu binden (ohne viel Glück).So binden Sie IsChecked an eine ViewModel-Unterklasse

In meinem Viewmodel Klasse ...

public class TestClass 
{ 
    private bool _TestValue; 
    public bool TestValue 
    { 
     get { return _TestValue; } 
     set 
     { 
     _TestValue = value; 
     System.Windows.MessageBox.Show("TestValue = " + _TestValue); 
     } 
    } 
} 
public TestClass TC; 

In meinem Viewmodel Konstruktor ...

TC = new TestClass(); 
TC.TestValue = false; 

Meiner Ansicht ...

<CheckBox IsChecked="{Binding Path=TC.TestValue, Mode=TwoWay}">Option 1</CheckBox> 

Meine Erwartung ist, dass, wenn Ich schalte die Checkbox ein, ich sollte Fenster auftauchen sehen, die sagen "TestValue = True" oder "TestValue = False", aber das passiert nicht. Was vermisse ich?

+1

Das ist nicht der empfohlene Ansatz, um so etwas zu erreichen. Sie sollten 'INotifyPropertyChanged' in' TestClass' implementieren und dann dieses Ereignis in Ihrem ViewModel behandeln. Der Code, der die MessageBox auslöst, befindet sich in diesem Handler –

+0

Wie @AgustinMeriles sagte, implementieren Sie die 'INotifyPropertyChanged'-Schnittstelle. Suchen Sie nach geeigneten mvvm-Tutorials. Es gibt Tonnen online. Sie müssen nur geringfügige Änderungen an Ihrer bestehenden 'TestClass' implementieren. Btw AFAIK, "System.Windows.MessageBox" funktioniert nicht in WPF. Ich erinnere mich, dass wir dafür eigene Dialogsteuerungen implementiert haben. –

+0

@Ephraim Was meinst du mit 'System.Windows.MessageBox' funktioniert nicht in WPF? Es funktioniert gut, ich habe es oft zu Testzwecken benutzt. – Maxim

Antwort

2

Schalten Sie Ihr öffentliches Feld TC in Eigentum und Ihre Bindung wird funktionieren.

public TestClass TC { get; } 

Sie können von this Post mehr über dieses Verhalten lernen.

Verwandte Themen