继承类中的属性未按预期在WPF中绑定

时间:2015-03-26 13:03:01

标签: c#

我将对象列表绑定到WPF中的列表框控件,并且对象的继承基类的属性不绑定。

public class BaseClass
{
  public string MyProp
}
public class MyClass:BaseClass
{
}

当绑定列表时,它就好像MyProp不是有效的,即使我使用.convertall(t => t作为BaseClass)

System.Windows.Data Error: 40 : BindingExpression path error

我错过了什么?

1 个答案:

答案 0 :(得分:1)

要在WPF中使用Binding,您必须在视图模型上绑定Property。在您提供的代码中,您使用的是Field。以下是属性上Binding的示例。

public class BaseClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public string MyProp
    {
        get
        {
           return mMyProp;
        }
        set
        {
           if( Equals( mMyProp, value ) ) return;
           mMyProp = value;

           OnPropertyChanged( "MyProp" );
    }

    protected virtual void OnPropertyChanged( string propertyName )
    {
        var handler = PropertyChanged;
        if( handler != null ) handler( this, new PropertyChangedEventArgs( propertyName ) );  
    }

    //  The field.
    private string mMyProp;
}

我应该注意,INotifyPropertChanged接口和实现不是必需的。如果您希望对属性的更改反映在您的UI上,则需要它。

你的派生类:

public MyClass : BaseClass
{
    //  ...
}

假设您的DataContextMyClass的<{1}},您在XAML中的绑定:

<!-- .. -->
<TextBlock Text="{Binding MyProp}"/>
<!-- .. -->