2016-12-28 3 views
1

他にも同様のSOのポストがあることは知っていますが、クラスプロパティにバインドするシナリオはありません。ちょうど良い。私はMVVMパターンを使用しています。私のviewmodelはC++/cliにあります。他のプロパティが機能するので、私のビューの私のDataContextではありません。 ViewModelのboolにバインドするButtonIsEnabledがあります。今のようなものにバインドしようとすると、WPF他のプロパティが正常に動作するときのクラスプロパティへのバインドエラー

private: 
bool thing = false; 
public: 
bool Thing 
{ 
    bool get() { return thing; } 
    void set(bool value) { thing = value; } 
} 

うまく動作します。しかし、その後、私は

public ref class MyThingClass 
{ 
    private: 
    bool isEnabled = false; 
    public: 
    bool IsEnabled 
    { 
     bool get() { return thing; } 
     void set(bool value) { thing = value; } 
    }; 
}; 

public: 
//Not sure if I need a handle (^) on this or not 
MyThingClass MyThing; 


//XAML 
<Button x:Name="MyButton" IsEnabled="{Binding MyThing.IsEnabled}"/> 

何かが壊れることを決定した、ような何かをし、プロパティが結合していない、と私は何を残し、または何かが」doesnの場合、出力に私がSystem.Windows.Data Error: 40 : BindingExpression path error: 'MyThing ' property not found on 'object' ''MyViewModel' (HashCode=66641179)'. BindingExpression:Path=MyThing.IsEnabled; DataItem='MyViewModel' (HashCode=66641179); target element is 'Button' (Name='MyButton'); target property is 'IsEnabled' (type 'Boolean')

お尋ね下さい質問を受けます意味をなさないあなたが書く

答えて

2

MyThingClass MyThing; 

あなたはMyThingという名前パブリックフィールド、ないプロパティを作成します。

これは、データバインディングを使用するために、プロパティではなく、フィールドとして定義する必要があります、また

property MyThingClass^ MyThing; 

を使用すると、プロパティがUIを更新したい場合は、あなたのMyThingClassを実装する必要がありますINotifyPropertyChanged。また、管理対象クラスであるため、ハンドルタイプ(^)の必要性に注意してください。

+0

わかりましたので、明らかに私は私の質問を変更する必要があります。私のViewModelはC++/CLI上にあるので、このメソッドは直感的に移植しません。私は物事を切り替えることは本当に残念です、私は物事がより良いポートと思った、とC#を書く/読んで簡単だった。 –

+0

@SanjayCruze私はこれをクローズ/受け入れて、実際のコード(または少なくともC++/CLIにあるコード)を示す新しい質問を作成します。 –

+0

um、ちょうどそれを変更しました。私はそれを元に戻し、この答えを受け入れて、新しい質問をするべきですか? –

関連する問題