1
我在我的控制中有兩個依賴屬性。兩者都綁定到不同類型的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
方法不會幫助,因爲它不能強制依賴屬性從ViewModel中加載一個新的值?
合併ViewModel中的兩個列表不是一個選項,因爲這是一個與視圖相關的任務。
我以「用戶可以隨意更改這兩個屬性」的方式思考「確定性」。所以我需要設計自己的控制方式,首先應用哪個屬性無關緊要。我會相應地編輯我的問題。 –
你必須退後一步,再次思考你的設計,而不是將它與對方相連,因爲如果你說「用戶可以隨意更改兩個屬性」,那麼你的邏輯看起來不正確。如果他們先改變答案然後問題會發生什麼?您只能在答案回調中處理它。爲什麼你需要同時列出兩個列表?你想做什麼?它不能在ViewModel上嗎?這真的是你要做的UI邏輯嗎? –