Я создал пользовательский UserControl. После blog post мой код-за контроль выглядит следующим образом:Связывание внутри UserControl
public BasicGeoposition PinGeoposition
{
get { return (BasicGeoposition) GetValue(PropertyPinGeoposition); }
set { SetValueDp(PropertyPinGeoposition, value);}
}
public static readonly DependencyProperty PropertyPinGeoposition =
DependencyProperty.Register("PinGeoposition", typeof(BasicGeoposition), typeof(CustomMapControl), null);
public event PropertyChangedEventHandler PropertyChanged;
void SetValueDp(DependencyProperty property, object value, [System.Runtime.CompilerServices.CallerMemberName] String p = null)
{
ViewModel.SetMode(ECustomMapControlMode.Default);
SetValue(property, value);
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(p));
}
Использование моего контроля:
<customControls:CustomMapControl Mode="ForImage" PinGeoposition="{Binding Geoposition, Mode=TwoWay}" Grid.Row="1"/>
Наконец в ViewModel этих страниц, где я использую свой контроль у меня есть:
public BasicGeoposition Geoposition
{
get { return _geoposition; }
set
{
if (Set(ref _geoposition, value))
{
RaisePropertyChanged(() => Geoposition);
}
}
}
Я ожидаю, что каждое изменение геопозиции в ViewModel будет отражено в SetValueDp. К сожалению, это не сработает.
Вы создали * DataContext *? Вы отлаживали, чтобы узнать, что происходит в коде? Я подозреваю, что * SetValueDp * запускается только тогда, когда вы создаете привязку - настройте свойство зависимостей после этого нормального связывания. – Romasz
Я установил DataContext в файл xaml, потому что мой элемент управления основан на ViewModel. SetValueDp никогда не запускается. – pbalut