WPF自定义控件:DependencyProperty从不设置(仅在多个属性中的一个)

沙布布

我做了一个自定义控件,称为AddressForm,它继承自Control。该控件用于显示IAddress对象的字段。

最初,我是在Silverlight中创建此控件的,现在我正在尝试使其在WPF .net 4.5中运行。

该控件定义了9个不同的依赖项属性,除了一个属性外,其他所有属性均正常工作。自然,不起作用的是Address对象本身!

控件的Address属性从不接收任何值。我在地址的Getter中放置了一个断点,该属性被调用,地址对象不为null,但控件未收到它。

输出屏幕中没有异常,也没有错误消息。

控制 :

public class AddressForm : Control, INotifyPropertyChanged
{
    [...]

    public static readonly DependencyProperty AddressProperty = DependencyProperty.Register("Address", typeof(IAddress), typeof(AddressForm), new PropertyMetadata( AddressChanged));
    public IAddress Address 
    {
        get { return (IAddress)GetValue(AddressProperty); }
        set { SetValue(AddressProperty, value); } 
    }

    private static void AddressChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        //break-point here never gets hit
        AddressForm form = d as AddressForm;
        if (form != null)
            form.OnAddressSet();
    }

    private void OnAddressSet()
    {
        //break-point here never gets hit
        if (StateProvince != null && Address != null)
        SelectedStateProvince = StateProvince.Where(A => A.StateProvince == Address.StateProvince).FirstOrDefault();
    }

    [...]
}

(其他DependencyProperty的设置方法相同,并且可以正常工作。)

xaml:

<Address:AddressForm Address="{Binding SelectedMFG.dms_Address, Mode=TwoWay}" ... />

SelectedMFG的类型为scm_MFG

数据对象:

public partial class scm_MFG 
{
    [...]
    public virtual dms_Address dms_Address { get; set; } //break-point here never enables? Generated code from Entity TT

    //Another attempt, trying to determine if the IAddress cast was the cause of the issue
    //Address="{Binding SelectedMFG.OtherAddress}" 
    public IAddress OtherAddress 
    {
        get { 
            return dms_Address as IAddress; //break-point here gets hit. dms_Address is not null. Control never receives the value.
        } 
    }
}

public partial class dms_Address : IAddress, INotifyPropertyChanged { ... }

我的尝试:

我尝试以其他方式访问dms_Address属性。我可以在文本框中显示Address的值,这告诉我datacontext没有问题。

<TextBox  Text="{Binding SelectedMFG.dms_Address.StreetName, Mode=TwoWay}" /> <!-- this value displays -->

我还尝试过更改依赖项属性的注册元数据。我不确定使用哪种正确的方法:PropertyMetadata,UIPropertyMetadataFrameworkPropertyMetadata

DependencyProperty.Register("Address", typeof(IAddress), typeof(AddressForm), new PropertyMetadata(AddressChanged));
DependencyProperty.Register("Address", typeof(IAddress), typeof(AddressForm), new PropertyMetadata(null, AddressChanged));
DependencyProperty.Register("Address", typeof(IAddress), typeof(AddressForm), new UIPropertyMetadata(AddressChanged));
DependencyProperty.Register("Address", typeof(IAddress), typeof(AddressForm), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.Inherits, AddressChanged));
// and other FrameworkPropertyMetadataOptions, no difference

相信我已经正确地完成了所有工作,并且应该可以正常工作。

是否有任何异常或错误跳出来?

沙布布

我找到了解决方案。

我将表单上的地址依赖项属性从IAddress更改Object现在该属性已设置。似乎即使我正在返回IAddress对象,该窗体实际上正在接收的对象也是dms_Address的EntityWrapper。

该实体包装器也将强制转换IAddress,所以我不确定为什么它会这样。我猜只是另一个实体陷阱。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

WPF:自定义控件属性已被另一个自定义控件错误注册

从自定义控件的另一个属性获取在设计器中设置的属性值

如何使用XAML中的另一个自定义控件基类使WPF在视图中实例化一个自定义控件?

在同一个库中如何有许多wpf自定义控件?

WPF自定义控件:将CollectionViewSource绑定到DependencyProperty

将属性绑定到自定义控件的另一个属性

Xpages-自定义控件从另一个自定义控件获取自定义属性

处理 MVVM (WPF) 中自定义控件的属性

将自定义控件中的DependencyProperty绑定到ViewModel属性

我可以创建一个使用Generic.xml中的另一个自定义控件的自定义控件吗

创建一个自定义属性类以在一个类中多次重用

是否可以在自定义View类中创建另一个控件?

当设置了多个其他属性时,仅在检查器中显示一个属性

使用WPF C#中的多个控件的组合创建自定义控件

如何在自定义控件中创建一个按钮以触发onClick事件,并以自定义控件所在的主要形式对其进行处理?

DynamicResource中的自定义控件属性

C#从自定义属性网格按选项卡顺序转到下一个控件

产品设置中的“自定义”复选框,选中后会显示一个自定义字段

在另一个自定义UIView中设置/更改嵌套自定义UIView的变量

moshi自定义限定符注释仅在一个属性上序列化null

自定义控件从另一个函数选择器控件返回任务

创建一个自定义绑定属性

创建一个自定义的动画属性

给指令一个自定义属性。

WPF:DependencyProperty在TextBlock上有效,但不适用于自定义控件

如何从自定义用户控件 WPF、C# 中的枚举自定义属性获取值?

根据自定义控件的 DependencyProperty 设置 DockPanel.Dock 不起作用

是否可以将多个异常收集到一个自定义异常中?

CakePhp在一个自定义模型中访问多个表