2017-06-07 22 views
0

私はViewModelクラスのサブクラスにチェックボックスをバインドしようとしています(大したことはありません)。私のViewModelクラスで IsCheckedをViewModelサブクラスにバインドする方法

...私のViewModelコンストラクタで

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

...私の見解では

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

...

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

私の期待があるときに私はチェックボックスを切り替える私は "TestValue = True"または "TestValue = False"と言うウィンドウがポップアップ表示されるはずですが、それは起こらない。私は何が欠けていますか?

+1

このようなことを達成するには、推奨されるアプローチではありません。 'INotifyPropertyChanged'を' TestClass'に実装し、そのイベントをViewModelで処理する必要があります。 MessageBoxを呼び出すコードはこのハンドラにあります –

+0

@AgustinMerilesが述べたように、 'INotifyPropertyChanged'インタフェースを実装します。適切なmvvmチュートリアルを参照してください。オンラインでトンがあります。既存の 'TestClass'にわずかな変更を加えるだけで済みます。 Btw AFAIK、 'System.Windows.MessageBox'はWPFでは動作しません。私たちはこのために独自のダイアログコントロールを実装していたことを覚えています。 –

+0

@Ephraim 'System.Windows.MessageBox'はWPFで動作しませんそれは正常に動作し、私はテスト目的のために何度もそれを使用しました。 – Maxim

答えて

2

あなたのTCパブリックフィールドをプロパティにすると、バインディングが機能します。

public TestClass TC { get; } 

この動作の詳細については、this投稿から確認できます。

関連する問題