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逻辑吗? –