0

コントロールがあります:DailyHours。これには、私が作成したカスタム TimeEdit コントロールのコレクションがあります。各コントロールは、DailyHours ビューモデル クラスにバインドすることになっています。代わりに、TimeEdit コントロールでバインドする値を見つけようとします。

TimeEdit コントロール バインディングの例:

<bc:TimeEdit Time="{Binding CurrentOperatingHours.MondayClose}" ></bc:TimeEdit>

TimeEdit コントロールには、Hour プロパティと Minute プロパティにバインドされた時間と分の独自の内部値があります。このため、TimeEdit コントロールの DataContext はそれ自体です。

public TimeEdit()
{
  InitializeComponent();
  this.DataContext = this;
}

ただし、これにより、DailyHours コントロールが時間値を誤ってバインドします。独自のビュー モデルではなく、TimeEdit コントロールで CurrentOperatingHours プロパティを検索します。

親コンテナへのバインドを妨げずに、TimeEdit コントロールを内部値に正しくバインドするにはどうすればよいですか?

4

2 に答える 2

5

2 つの方法があります: this.Datacontext = this; を削除します。ユーザーコントロールから、時間と分にElementNameでバインディングを使用するか(良い習慣です!)、メインビューでrelativeSourceBindingを使用します(悪い習慣です)。

ここで同様の質問に答えました。

ps: ユーザーコントロールは、データコンテキストを自分自身に設定しないでください。これはデータコンテキストの継承を壊し、予期された動作ではありません。

于 2012-06-29T11:01:13.623 に答える
0

これを試して

Time="{Binding DataContext.CurrentOperatingHours.MondayClose, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"> 

これがうまくいくことを願っています。

于 2012-06-29T11:00:09.230 に答える