私のコントロールには2つの依存関係プロパティがあります。両方とも異なるタイプのIReadOnlyList
に結合します。ロードするWPF依存関係プロパティの待機
#region QuestionsProperty
public static readonly DependencyProperty QuestionsProperty =
DependencyProperty.Register("Questions", typeof(IReadOnlyList<IQuestion>), typeof(DecisionsControl), new FrameworkPropertyMetadata(OnQuestionsChanged));
public IReadOnlyList<IQuestion> Questions
{
get { return (IReadOnlyList<IQuestion>)GetValue(QuestionsProperty); }
set { SetValue(QuestionsProperty, value); }
}
private static void OnQuestionsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
DecisionsControl control = d as DecisionsControl;
control?.OnQuestionsChanged((IReadOnlyList<IQuestion>)e.OldValue, (IReadOnlyList<IQuestion>)e.NewValue);
}
public void OnQuestionsChanged(IReadOnlyList<IQuestion> oldValue, IReadOnlyList<IQuestion> newValue)
{
// Both lists needed here
}
#endregion
#region AnswersProperty
public static readonly DependencyProperty AnswersProperty =
DependencyProperty.Register("Answers", typeof(IReadOnlyList<IAnswer>), typeof(DecisionsControl), new FrameworkPropertyMetadata(OnAnswersChanged));
public IReadOnlyList<IAnswer> Answers
{
get { return (IReadOnlyList<IAnswer>)GetValue(AnswersProperty); }
set { SetValue(AnswersProperty, value); }
}
private static void OnAnswersChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
DecisionsControl control = d as DecisionsControl;
control?.OnAnswersChanged((IReadOnlyList<IAnswer>)e.OldValue, (IReadOnlyList<IAnswer>)e.NewValue);
}
public void OnAnswersChanged(IReadOnlyList<IAnswer> oldValue, IReadOnlyList<IAnswer> newValue)
{
// Both lists needed here
}
#endregion
コントロールでは、コンテンツを正しく表示するためには両方のリストが必要です。 ViewModelの作成者は、両方のプロパティを自由に読み込むことができるので、最初に利用可能なリストがわからないでしょう。
私は両方のリストが利用可能になるのを待つ方法を探しています。 CoreceValue
メソッドは、Dependency PropertyがViewModelから新しい値をロードするように強制することができないため、役に立たないと思いますか?
ViewModelで2つのリストをマージすることは、ビュー関連のタスクであるためオプションではありません。
私は「ユーザーが2つのプロパティを自由に変更できる」という意味で「決定論的」と考えました。だから私は、どのプロパティが最初に適用されるかは関係のない方法でコントロールを設計する必要があります。私はそれに応じて私の質問を編集します。 –
あなたは、「ユーザーが2つのプロパティを自由に変更できる」と言っているときに、ロジックが正しくないように見えるので、設計をやり直して再度考えてみる必要があります。彼らが最初に答えを変えてから質問をしたらどうなるでしょう?あなたは答えのコールバックでのみそれを処理しています。なぜあなたは同時に2つのリストを必要としますか?あなたは何をしようとしているのですか? ViewModel上にないのですか?これは本当にあなたがやるUIロジックですか? –