依存関係プロパティへのバインドに苦労しています。
私のアプリケーションには 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 コントロールに値を渡す方法です。