2013-11-11 6 views
0

Я изо всех сил пытаюсь связать свойство зависимостей.Невозможно связать свойство зависимостей

Мое приложение имеет 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 с помощью свойства зависимости.

+0

Слово совета. Посмотрите на результат. Если есть какие-либо ошибки привязки, они перечислены там –

+0

Спасибо @David, к сожалению, нет ошибок – Dave

+0

Вы проверили значение «EndReportPositionInPixels» с отладчиком, прикрепленным после загрузки события? Точка останова сеттера не будет удачной, но проверьте правильность ее значения. –

ответ

2

Прежде всего вам не нужно INPC для свойств зависимостей. Второй взгляд на этот код -

public double EndReportPositionInPixels 
    { 
     get { return (double)GetValue(ScaleFactorProperty); } 
     set { SetValue(ScaleFactorProperty, value); } 
    } 

Вы установки и получения значений для ScaleFactorProperty здесь. Не должно быть EndReportPositionInPixelsPoperty около этого -

public double EndReportPositionInPixels 
    { 
     get { return (double)GetValue(EndReportPositionInPixelsPoperty); } 
     set { SetValue(EndReportPositionInPixelsPoperty, value); } 
    } 
+1

* Разве это не должно быть EndReportPositionInPixelsPoperty вроде этого? * Да, это должно быть! Какая глупая ошибка, хотя я над луной, она решена. Спасибо! – Dave

Смежные вопросы