Ich habe ein benutzerdefiniertes Steuerelement namens AddressForm erstellt, das von Control erbt. Das Steuerelement wird verwendet, um die Felder für ein IAddress-Objekt anzuzeigen.WPF-Benutzersteuerelement: DependencyProperty wird nie festgelegt (nur bei einer von vielen Eigenschaften)
Ursprünglich habe ich diese Kontrolle in Silverlight, jetzt versuche ich, es .net 4.5
Die Steuerung definiert 9 verschiedene Abhängigkeitseigenschaften, und alle bis auf einen ordnungsgemäß funktioniert in WPF arbeiten zu erhalten. Natürlich funktioniert das Adressobjekt selbst nicht!
Die Address-Eigenschaft des Steuerelements erhält niemals einen Wert. Ich habe einen Break-Point in der Adresse Getter, die Eigenschaft wird aufgerufen, das Adressobjekt ist nicht null, aber das Steuerelement erhält es nicht.
Im Ausgabebild gibt es keine Ausnahmen und keine Fehlermeldungen.
Steuerung:
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();
}
[...]
}
(Andere DependencyProperties werden in der gleichen Weise eingestellt und korrekt arbeiten.)
XAML:
<Address:AddressForm Address="{Binding SelectedMFG.dms_Address, Mode=TwoWay}" ... />
die Art der SelectedMFG ist scm_MFG
Datenobjekte:
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 { ... }
Meine Versuche:
ich versucht habe, die dms_Address Eigenschaft verschiedene Arten zugreifen. Ich kann die Werte der Adresse in einem Textfeld anzeigen, das sagt mir, dass es kein Problem mit dem Datenkontext gibt.
<TextBox Text="{Binding SelectedMFG.dms_Address.StreetName, Mode=TwoWay}" /> <!-- this value displays -->
Ich habe auch versucht, die Registrierungs-Metadaten der Abhängigkeitseigenschaft zu ändern. Ich bin mir nicht sicher, welche die richtige zu verwenden ist:
PropertyMetadata, UIPropertyMetadata oder 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
.
ich glaube ich, alles richtig gemacht haben und dass diese arbeiten sollte.
Fällt irgendetwas als seltsam oder falsch aus?