我将对象列表绑定到WPF中的列表框控件,并且对象的继承基类的属性不绑定。
public class BaseClass
{
public string MyProp
}
public class MyClass:BaseClass
{
}
当绑定列表时,它就好像MyProp不是有效的,即使我使用.convertall(t => t作为BaseClass)
System.Windows.Data Error: 40 : BindingExpression path error
我错过了什么?
答案 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
{
// ...
}
假设您的DataContext
是MyClass
的<{1}},您在XAML中的绑定:
<!-- .. -->
<TextBlock Text="{Binding MyProp}"/>
<!-- .. -->