Я изо всех сил пытаюсь связать свойство зависимостей.Невозможно связать свойство зависимостей
Мое приложение имеет MainWindow. В этом пользовательское управление (называемое временной шкалой). В TimeLine UserControl есть еще один элемент управления под названием MoveMe.
Я могу привязать к свойствам зависимости временной шкалы UserControl из MainWindow. Я могу связать с MoveMe UserControl с MoveMe, когда я использую привязку OneWayToSource
. Тем не менее, я пытаюсь связать с временной шкалой UserControl элемент управления MoveMe (от родителя к ребенку). Однако привязка не работает. Я поставил часы на установщика свойства MoveMe, и он никогда не запускается.
В окне вывода нет проблем с привязкой.
Мои MainWindow.xaml имеет
<timeline:TimeLine StartTime="{Binding StartTime}"
EndTime="{Binding EndTime}"
TestEvents="{Binding TestEvents}"
CampaignDetails="{Binding CampaignDetails}"
ShowReportPeriod="True" HorizontalAlignment="Stretch"/>
Мой timeline.xaml имеет
<userControls:MoveMe
StartMarkerPositionPixels="{Binding RelativeSource={RelativeSource AncestorType=userControls:TimeLine}, Path=StartMarkerPosition, Mode=OneWayToSource}"
EndReportPositionInPixels="{Binding RelativeSource={RelativeSource AncestorType=userControls:TimeLine}, Path=EndOfReportPosition, Mode=OneWay}"
x:Name="ReportSelectorStart" />
и это DataContext устанавливается как
<UserControl DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1,AncestorType=Window}}"...
Итак, как вы можете видеть выше, в timeline.xaml есть 2 свойства, которые связаны, первый из которых - StartMarkerPositionPixels, который является OneWayToSource. Это прекрасно работает. Проблема заключается во втором, EndReportPositionInPixels, поскольку это не связывает.
код позади управления MoveMe
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
namespace TimeLineCanvas.UserControls
{
/// <summary>
/// Interaction logic for MoveMe.xaml
/// </summary>
public partial class MoveMe : UserControl
{
public MoveMe()
{
InitializeComponent();
//this.DataContext = this;
}
public double StartMarkerPositionPixels
{
get { return (double)GetValue(StartMarkerPositionProperty); }
set { SetValue(StartMarkerPositionProperty, value); }
}
public double EndReportPositionInPixels
{
get { return (double)GetValue(ScaleFactorProperty); }
set { SetValue(ScaleFactorProperty, value);
OnPropertyChanged("EndReportPositionInPixels");
}
}
public static readonly DependencyProperty EndMarkerPositionProperty = DependencyProperty.Register(
"EndMarkerPositionPixels",
typeof(double),
typeof(MoveMe));
public static readonly DependencyProperty EndReportPositionInPixelsPoperty = DependencyProperty.Register(
"EndReportPositionInPixels",
typeof(double),
typeof(MoveMe));
}
}
В моем Timeline коде, я следующий
private double _endOfReportPosition;
public double EndOfReportPosition
{
get { return _endOfReportPosition; }
set
{
_endOfReportPosition = value;
//this.ReportSelectorStart.EndMarkerPositionPixels = value;//If I hardcode it in, then it works, but I want it bind
OnPropertyChanged("EndOfReportPosition");
}
}
Выходного окна не подтверждает и не обязательные ошибок.
Мой вопрос: как передать значение из моего элемента управления TimeLine в элемент управления MoveMe с помощью свойства зависимости.
Слово совета. Посмотрите на результат. Если есть какие-либо ошибки привязки, они перечислены там –
Спасибо @David, к сожалению, нет ошибок – Dave
Вы проверили значение «EndReportPositionInPixels» с отладчиком, прикрепленным после загрузки события? Точка останова сеттера не будет удачной, но проверьте правильность ее значения. –