È possibile impostare il valore predefinito in PropertyMetadata (Dr. WPF's snippets per il salvataggio!).
#region IsAvailable
private static bool DefaultIsAvailable = false;
/// <summary>
/// IsAvailable Dependency Property
/// </summary>
public static readonly DependencyProperty IsAvailableProperty =
DependencyProperty.Register(
"IsAvailable",
typeof(bool),
typeof(CustomControl1),
new PropertyMetadata(DefaultIsAvailable, OnIsAvailableChanged));
/// <summary>
/// Gets or sets the IsAvailable property. This dependency property
/// indicates ....
/// </summary>
public bool IsAvailable
{
get { return (bool)GetValue(IsAvailableProperty); }
set { SetValue(IsAvailableProperty, value); }
}
/// <summary>
/// Handles changes to the IsAvailable property.
/// </summary>
/// <param name="d">
/// The <see cref="DependencyObject"/> on which
/// the property has changed value.
/// </param>
/// <param name="e">
/// Event data that is issued by any event that
/// tracks changes to the effective value of this property.
/// </param>
private static void OnIsAvailableChanged(
DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var target = (CustomControl1)d;
bool oldIsAvailable = (bool)e.OldValue;
bool newIsAvailable = target.IsAvailable;
target.OnIsAvailableChanged(oldIsAvailable, newIsAvailable);
}
/// <summary>
/// Provides derived classes an opportunity to handle changes
/// to the IsAvailable property.
/// </summary>
/// <param name="oldIsAvailable">The old IsAvailable value</param>
/// <param name="newIsAvailable">The new IsAvailable value</param>
protected virtual void OnIsAvailableChanged(
bool oldIsAvailable, bool newIsAvailable)
{
}
#endregion
EDIT *
Se si desidera modificare il valore - è possibile, ma se si utilizza un legame di base che è OneWay
- cioè - ci vuole il valore da una fonte vincolante e lo imposta al proprietà di dipendenza: l'associazione smetterà di funzionare perché i valori di origine e di destinazione non saranno più sincronizzati.
Se si imposta Mode="TwoWay"
- l'origine di associazione verrà aggiornata quando la destinazione vincolante (il proprio controllo) modifica la proprietà di dipendenza, pertanto l'associazione rimarrà valida e continuerà a funzionare in entrambi i modi.
fonte
2012-05-04 05:30:10
La risposta indica che l'impostazione del valore interrompe l'associazione, motivo per cui ho posto la domanda. L'unica alternativa che posso pensare è implementare INotifyPropertyChanged e utilizzare una proprietà "regolare", ma gli utenti non possono associarvi. –
Hmmm, in realtà - mi sono confuso. L'associazione non si interromperà se si imposta la Modalità su TwoWay. –
In base a http://msdn.microsoft.com/en-us/library/windows/apps/hh700353 I binding vengono considerati come valore locale ai fini della precedenza del valore della proprietà di dipendenza, il che significa che se si imposta un altro valore locale a una proprietà che originariamente conteneva un valore di associazione, eliminerai la rilegatura. Questo è il comportamento che mi sembra di provare –