2016-12-28 66 views
1

我知道有一堆像這樣的其他類似的SO帖子,但似乎沒有我的場景,我綁定到一個類屬性,AND其他屬性工作正好。我正在使用MVVM模式,其中我的viewmodel在C++/cli。由於其他屬性起作用,它不是我的視圖的DataContext。我有一個IsEnabledButton綁定到我的ViewModel中的布爾。現在,當試圖綁定到類似的東西,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}"/> 

決定的東西打破,屬性不綁定,並在輸出我得到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

嗯,只是改變它。我是否應該改回它,接受這個答案,並提出一個新的問題? –