Ho creato un controllo personalizzato chiamato AddressForm, che eredita da Control. Il controllo viene utilizzato per visualizzare i campi per un oggetto IAddress.Controllo personalizzato WPF: DependencyProperty mai impostato (solo su 1 di molte proprietà)
Originariamente ho fatto questo controllo in Silverlight, ora sto cercando di farlo funzionare in WPF .net 4.5
Il controllo definisce 9 differenti proprietà di dipendenza, e tutti tranne uno funziona correttamente. Naturalmente, quello che non funziona è l'oggetto Address stesso!
La proprietà Address del controllo non riceve mai un valore. Inserisco un break-point nel Getter dell'indirizzo, la proprietà viene richiamata, l'oggetto indirizzo non è nullo, ma il controllo non lo riceve.
Non ci sono eccezioni, né messaggi di errore nella schermata di output.
Controllo:
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();
}
[...]
}
(Altre DependencyProperties sono impostati allo stesso modo e funzionano correttamente.)
xaml:
<Address:AddressForm Address="{Binding SelectedMFG.dms_Address, Mode=TwoWay}" ... />
il tipo di SelectedMFG è scm_MFG
oggetti dati:
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 { ... }
miei tentativi:
ho provato l'accesso alle proprietà modi diversi dms_Address. Posso visualizzare i valori dell'indirizzo in una casella di testo, che mi dice che non ci sono problemi con il datacontext.
<TextBox Text="{Binding SelectedMFG.dms_Address.StreetName, Mode=TwoWay}" /> <!-- this value displays -->
Ho anche provato a modificare i metadati di registrazione della proprietà di dipendenza. non sono sicuro che è quello corretto da utilizzare: PropertyMetadata, UIPropertyMetadata o 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
.
Io credo ho fatto tutto correttamente e che questo dovrebbe funzionare.
Qualcosa salta fuori come strano o errato?