0

依存関係プロパティへのバインドに苦労しています。

私のアプリケーションには MainWindow があります。これにはユーザー コントロール (タイムラインと呼ばれます) があります。TimeLine UserControl 内には、MoveMe という別のコントロールがあります。

MainWindow からタイムライン UserControl の依存関係プロパティにバインドできます。バインドを使用すると、MoveMe から MoveMe UserControl にバインドできます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 つのプロパティがバインドされています。最初のプロパティは OneWayToSource である StartMarkerPositionPixels です。これはうまくいきます。これはバインドされないため、問題は 2 番目の 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 コントロールに値を渡す方法です。

4

1 に答える 1