当其他属性正常工作时,WPF将绑定错误绑定到类属性

时间:2016-12-28 00:39:27

标签: c# wpf mvvm

我知道有很多其他类似的SO帖子,但似乎没有一个我的场景我绑定到类属性,其他属性工作得很好。我正在使用MVVM模式,我的viewmodel在c ++ / cli 中。由于其他属性有效,因此不是我的DataContext视图。我在ViewModel中绑定了一个bool IsEnabled Button。现在,当试图绑定到类似的东西时,

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')

如果我遗漏了任何内容,或者某些事情没有意义,请提出问题。

1 个答案:

答案 0 :(得分:2)

当你写:

MyThingClass MyThing;

您创建名为MyThing公共字段,而不是属性

为了使用数据绑定,需要将其定义为属性而不是字段:

property MyThingClass^ MyThing;

此外,如果您希望该媒体资源更新用户界面,则MyThingClass需要实施INotifyPropertyChanged。另请注意需要句柄类型(^),因为它是托管类。