2011-01-17 3 views
4

У меня есть сводный элемент управления, где его элемент содержит список с элементами. Когда я перейти к следующему пункту шарнирного связывания данных занимают некоторое время, и я хочу знать, когда привязка данных завершены, потому что мне нужно, чтобы включить строку меню, как только ListBox готов появиться. Я не мог найти событие, которое может помочь мне здесь. Я попробовал событие Loaded из списка, но пока он работает для некоторых элементов, для некоторых других он не срабатывает! Я также пробовал обновленную версию макета, но ее увольняют слишком много раз, и это не может мне помочь.Как проверить, завершена ли привязка данных к списку? (wp7)

Что я могу сделать? благодарит вас

ответ

1

Чтобы обеспечить хорошую производительность при быстрой прокрутке элементов поворота, вы должны подождать, чтобы связать содержимое элемента поворота, пока не изменится SelectedIndex. Таким образом, он не будет пытаться связываться, пока пользователь будет быстро переключаться между элементами Pivot; он будет привязываться только тогда, когда вы остановитесь на элементе Pivot.

Затем вы должны установить свойство ItemsSource ListBox в элементе Pivot в событии LayoutUpdated. Я использую следующий метод расширения:


     public static void InvokeOnLayoutUpdated(this FrameworkElement element, Action action) 
     { 
      if (element == null) 
      { 
       throw new ArgumentNullException("element"); 
      } 
      else if (action == null) 
      { 
       throw new ArgumentNullException("action"); 
      } 

      // Create an event handler that unhooks itself before calling the 
      // action and then attach it to the LayoutUpdated event. 
      EventHandler handler = null; 
      handler = (s, e) => 
      { 
       element.LayoutUpdated -= handler; 
       action(); 
      }; 
      element.LayoutUpdated += handler; 
     } 

Таким образом, вы бы тогда какой-то код, который выглядел примерно так:


pivot.InvokeOnLayoutUpdate(() => 
    { 
    Dispatcher.BeginInvoke(() => 
     { 
     list.ItemsSource = source; 
     ApplicationBar.IsMenuEnabled = true; 
     }); 
    }); 
+0

Почему Dispatch.BeginInvoke, его 'LayoutUpdated' событие, несомненно, что пожары на пользовательском интерфейсе Нить? – AnthonyWJones

+0

Правда; почти наверняка не нужно. Я на самом деле использую другое расширение mthod для вызова в потоке пользовательского интерфейса, если на самом деле это не поток пользовательского интерфейса, но это было сделано для краткости :) –

+0

это хорошая работа, но как я могу остановить привязку данных, когда selectedIndex изменения? пока выполняется привязка данных, стержень не реагирует на жесты, и если я делаю жест до завершения привязки данных, он выполняется после загрузки данных. Похоже, что опорная точка запоминает мои ходы и заботится о них после завершения привязки данных, даже если во время этого задания установить IsHitTestVisible на false. – johnX99

Смежные вопросы