在我的.NET 4.0项目中,我有一个具有公共字段的对象,该对象既不实现INotifyPropertyChanged也不继承DependencyObject,它永远不会。但是,我需要一种机制来“绑定”我的WPF控件中的此对象的字段。我知道我不能直接这样做,因为绑定需要依赖属性(或至少属性和通知属性更改),所以我该怎么做才能实现我需要的绑定功能。我在WPF控件中尝试过类似的东西:
void FirePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public float Friction
{
get
{
if (CurrentObject != null)
{
return CurrentObject.Friction;
}
else
{
return 0.0f;
}
}
set
{
if (CurrentObject != null)
{
CurrentObject.Friction = value;
FirePropertyChanged("Friction");
}
}
}
public PlatformObjectTemplate CurrentObject
{
get
{
return GetValue(CurrentObjectProperty) as PlatformObjectTemplate;
}
set
{
SetValue(CurrentObjectProperty, value);
FirePropertyChanged("Friction");
FirePropertyChanged("CurrentObject");
BindShapes();
IntersectionComboBox.SelectedItem = CurrentObject.IntersectionStaticMethod;
}
}
public static readonly DependencyProperty CurrentObjectProperty = DependencyProperty.Register("CurrentObject", typeof(PlatformObjectTemplate), typeof(PlatformStaticObjectPropertyEditor), new PropertyMetadata(null));
我的WPF控件实现了INotifyPropertyChanged,而我的PlatformObjectTemplate
没有属性,只有Friction
等公共字段。我需要在XAML中绑定到我的对象:
(在我的控件中):// DoubleUpDown来自WPF工具包。
<tk:DoubleUpDown Margin="91,10,7,0" Name="doubleUpDown1" VerticalAlignment="Top" Value="{Binding Friction, ElementName=window, FallbackValue=0}" />
(在我的主窗口中):
<my:PlatformStaticObjectPropertyEditor x:Name="platformStaticObjectPropertyEditor1" CurrentObject="{Binding CurrentObject, ElementName=window}" />
我在Friction属性的getter中放了一个断点,它尝试绑定绑定CurrentObject
之前,因为它是null,我无法读取正确的摩擦来自对象的价值。我试图触发在CurrentObject的setter中更改的Friction
属性,以便在设置CurrentObject时填充Friction,但这也不起作用。
好的,这有两个要求:
PlatformObjectTemplate
将不使用属性。它将有公共领域。
我像往常一样需要一种声明性的绑定方式,就像我在上面的XAML中使用的那样。
我可能有过于复杂的事情,我一定会错过一些东西。在上述要求的限制范围内,这种做法最“正确”和“声明”的方式是什么?
谢谢, 可以。
答案 0 :(得分:1)
object neither implements INotifyPropertyChanged nor inherits DependencyObject, and it will never. However, I need a mechanism to "bind" to fields of this object in my WPF control
INotifyPropertyChanged
的包装类。