gpt4 book ai didi

custom-controls - WPF 自定义控件 : DependencyProperty never Set (on only 1 of many properties)

转载 作者:行者123 更新时间:2023-12-04 07:08:23 28 4
gpt4 key购买 nike

我制作了一个名为 的自定义控件地址表格 ,它继承自 Control。该控件用于显示 IAddress 对象的字段。

最初我在 Silverlight 中制作了这个控件,现在我试图让它在 WPF .net 4.5 中工作

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

控件的地址属性从不接收值。 我在地址的 Getter 中放置了一个断点,属性被调用,地址对象不为空,但控件没有接收到它。

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

控制:

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();
}

[...]
}

(其他 DependencyProperties 以相同方式设置并正常工作。)

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 属性。我可以在文本框中显示地址的值,这告诉我数据上下文没有问题。
<TextBox  Text="{Binding SelectedMFG.dms_Address.StreetName, Mode=TwoWay}" /> <!-- this value displays -->

我也尝试过更改依赖属性的注册元数据。
我不确定使用哪个是正确的: 属性元数据、UIPropertyMetadata FrameworkPropertyMetadata
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

.

相信我做的一切都正确,这 应该工作。

有什么东西突然变得奇怪或不正确吗?

最佳答案

我找到了解决方案。

我更改了表单上的地址依赖属性 公司地址 对象 .现在该属性正在设置中。似乎即使我返回了 我的地址 对象,表单实际接收的对象是 实体包装器 对于 dms_Address。

此实体包装器将转换为 我的地址 也是,所以我不确定它为什么会这样。我猜只是另一个实体问题。

关于custom-controls - WPF 自定义控件 : DependencyProperty never Set (on only 1 of many properties),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31482565/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com