2013-01-14 3 views
0

뷰 관리를 위해 Prism 4.0을 사용하는 이미 존재하는 .NET 애플리케이션에서 몇 가지를 변경하려고합니다. 나는 .NET, WPF, Prism에 대해 많이 모른다.이 질문이 멍청한 것이라면 미안하다. 기본적으로 내 상황은 이것이다 :프리즘, WPF 페이지가로드 될 때 알아보기

A 버튼은 새 페이지를 밀어 클릭 된 다음 CreateGraphCommandHandler 방법에

private void CreateGraphCommandHandler() 
    { 
     // Request navigation 
     RegionManager.RequestNavigate(RegionNames.MainRegion, ScreenNames.GraphView); 
     EventAggregator.GetEvent<CreateGraphMessage>().Publish(SelectedChart); 
    } 

, 그것은 기본적으로 해당 데이터 포인트를 얻고 형 FrameWorkElement의 도표를 작성합니다. Visifire라는 타사 라이브러리를 사용하여 내가 믿는 플롯을 렌더링합니다. 그런 다음 이미지를 저장하고 다음 페이지로 이동하여 더 많은 차트를 확인하는 버튼이 있습니다. 내가 말할 수있는 것과 그래서

 void SaveUsingEncoder(FrameworkElement visual, string fileName, BitmapEncoder encoder) 
     { 
      int aheight = (int)visual.ActualHeight; 
      int awidth = (int)visual.ActualWidth; 

      RenderTargetBitmap bitmap = new RenderTargetBitmap(
       awidth, 
       aheight, 
       96, 
       96, 
       PixelFormats.Pbgra32); 
      bitmap.Render(visual); 
      BitmapFrame frame = BitmapFrame.Create(bitmap); 

,이 호출이 현재 화면에 렌더링 무슨 저장 : 이미지의 저장의

일부처럼 보인다.

사용자가 원하는 데이터 세트를 생성 할 수있는 모든 차트를 생성해야하는 새로운 요구 사항이 있습니다. 따라서 기본적으로 모든 화면을 통과하고 데이터를 차트로 작성하여 적절한 위치에 저장하십시오. 내가 겪고있는 문제는 다음 그림이 첫 번째 플롯을 생성하기 위해 푸시되면 플롯이 렌더링을 완료하기 전에 Save가 호출 된 것입니다. 화면이 플롯이 생성 된 페이지에 푸시됩니다

이 불려갑니다 :

EventAggregator.GetEvent<CreateGraphMessage>().Subscribe(CreateGraphHandler); 

그래서 나는 CreateGraphHandler 방법의 말에, 난 그냥 SaveChart를 호출 할 수 있다고 생각() 메서드 (버튼 누름에서 호출 된 것과 같은 메서드). 문제는 SaveUsingEncoder 메서드가 호출되면 FrameworkElement visual이 null 인 것입니다. 따라서 페이지가로드되지 않고 오류를 저장한다고 가정합니다. SaveChart()를 호출하기 전에이 페이지가 차트로드를 마칠 때까지 기다리는 방법이 있는지 궁금합니다. 미리 감사드립니다.

답변

0

페이지의 Loaded 이벤트를 사용하여 EventAggregator에 다른 메시지를 보내면 플로팅을 담당하는 구성 요소가 페이지가로드되고 비트 맵에 렌더링 될 수 있음을 알 수 있습니다.

+0

나를 시작할 수 있도록 코드 스 니펫이 있습니까? 감사. – Crystal

관련 문제