피벗 항목을 빠르게 스크롤 할 때 좋은 성능을 얻으려면 SelectedIndex가 변경 될 때까지 피벗 항목의 내용을 바인딩해야합니다. 이렇게하면 사용자가 피벗 항목 사이를 빠르게 스 와이프하는 동안 바인딩되지 않습니다. 피벗 아이템에서 멈 추면 바인딩됩니다.
그런 다음 LayoutUpdated 이벤트의 피벗 항목에서 ListBox의 ItemsSource 속성을 설정해야합니다.
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;
});
});
왜 Dispatch.BeginInvoke, 자사의'LayoutUpdated' 이벤트 확실히 그 UI에 화재 실? – AnthonyWJones
참; 거의 확실하게 필요하지 않습니다. 실제로 UI 스레드가 아닌 UI 스레드에서 호출하려면 다른 확장 mthod를 사용합니다. 간략하게하기 위해 생략되었습니다. –
좋은 방법이지만, 데이터 바인딩을 중지 할 수있는 방법은 selectedIndex 변화? 데이터 바인딩이 진행되는 동안 피벗은 제스처에 응답하지 않으며 데이터 바인딩이 완료되기 전에 제스처를 수행하면 데이터로드 후에 실행됩니다. 피벗은 내 동작을 기억하고 데이터 바인딩이 완료된 후 IsHitTestVisible을 false로 설정했다하더라도이를 처리합니다. – johnX99