列表以可视方式刷新,但VisualTreeHelper列表不正确

时间:2016-03-03 16:47:16

标签: c# focus visualtreehelper

在按钮上单击将在已注册消息接收者的所有viewModel上触发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);    
        }
    }
}

0 个答案:

没有答案