У меня очень похожая проблема, как описано в этом посте .
У меня есть UserControl для инкапсуляции адреса. Он содержит ряд основных элементов управления, в основном текстовые поля. Затем у меня есть вспомогательные свойства зависимостей в коде для каждого свойства ...
#region Line1
/// <summary>
/// Gets or sets the Line1.
/// </summary>
public string Line1
{
get
{
return (string)GetValue(Line1Property);
}
set
{
SetValue(Line1Property, value);
}
}
/// <summary>
/// The Line1 dependency property.
/// </summary>
public static readonly DependencyProperty Line1Property =
DependencyProperty.Register(
"Line1",
typeof(string),
typeof(AddressControl),
new PropertyMetadata(OnLine1PropertyChanged));
/// <summary>
/// Line1Property property changed handler.
/// </summary>
/// <param name="d">AddressControl that changed its Line1.</param>
/// <param name="e">DependencyPropertyChangedEventArgs.</param>
private static void OnLine1PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = d as AddressControl;
if (control != null)
{
control.OnLine1Changed((string)e.OldValue, (string)e.NewValue);
}
}
/// <summary>
/// Called when the Line1 changes.
/// </summary>
/// <param name="oldValue">The old value.</param>
/// <param name="newValue">The new value.</param>
private void OnLine1Changed(string oldValue, string newValue)
{
Line1TextBox.Text = newValue;
}
#endregion Line1
Затем я использую этот элемент управления в представлении ...
<myControls:AddressControl Grid.Row="0" Grid.Column="3"
Line1="{Binding Path=Line1, Mode=TwoWay}"/>
Похоже, это устанавливает значение текстового поля при обновлении свойства модели представления, как и следовало ожидать, однако моя проблема заключается в получении обновления от usercontrol обратно к модели представления?
По ссылке выше я должен проверить мой DataContext на элементе управления. Surley DataContext будет таким же, как родительский?
Я надеюсь, что ответ на этот вопрос будет применяться к нескольким уровням вложенности элементов управления, т.е. Control1 используется в Control2, который используется в Control3, весь смысл повторного использования!
сводит меня с ума, поэтому любая помощь действительно благодарна.