在按钮上单击 GalaSoft.MvvmLight.Messaging 消息会在所有注册了消息接收器的视图模型中触发。异步获取新的数据列表并用于更新 UI。UI 更新,但是当我调用以下命令时
var contentControls = VisualTreeQueryHelper.FindChildrenOfType(this).ToList();
即使屏幕上的视觉列表是正确的,它仍然反映旧列表的内容计数和索引。这打破了我使用索引和列表大小来设置焦点的焦点逻辑。
如果我离开视图并返回,则更正 contentControls 列表。
private IList<CoreViewModel> itemViewModels;
public IList<CoreViewModel> ItemViewModels
{
get { return this.itemViewModels; }
set
{
this.itemViewModels = value;
RaisePropertyChanged("ItemViewModels");
}
}
public static IEnumerable<T> FindChildrenOfType<T>(DependencyObject objectInParentTreeToStartFrom)
where T : DependencyObject
{
List<T> list = new List<T>();
FindChildrenOfTypeImpl<T>(objectInParentTreeToStartFrom, list);
return list;
}
private static void FindChildrenOfTypeImpl<T>(DependencyObject objectInParentTreeToStartFrom, List<T> list)
where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(objectInParentTreeToStartFrom); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(objectInParentTreeToStartFrom, i);
if (child is T)
{
list.Add(child as T);
}
else
{
FindChildrenOfTypeImpl(child, list);
}
}
}