我的控件中有两个依赖项属性。两者都绑定到IReadOnlyList
不同类型。
#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中的两个列表不是一个选项,因为这是一个与视图相关的任务。
答案 0 :(得分:2)
那不是真的。绑定以确定性方式解决。如果您正在使用MVVM模式,那么您应该可以在DataContextChanged
事件上进行连接,以确保ViewModel现在设置为View
,并且ViewModel
调用OnPropertyChanged
1}}那就是调用OnValueChanged
回调的时间。
在您的ViewModel中,您需要设置Questions
和Answers
,然后在OnPropertyChanged
上明确调用Answers
,以便您知道何时触发回调并执行那里的UI逻辑。