2012-09-18 3 views
0

Blend 2012 Metro Store App (Windows 8)에 사용할 샘플 데이터로 BitmapImage를 만드는 방법이 있습니까?Blend 2012의 디자인 모드에서 샘플 데이터 용 BitmapImage보기

다음과 같이 나는 뷰 모델이 있습니다

public ItemDesignDataVM() 
{ 
    WebThumbnail = new BitmapImage(new Uri(???)); 
} 

public string ItemId { get { return "123456"; } } 
public BitmapImage WebThumbnail { get; private set; } 

을 그리고 다음과 같이 XAML 내에서 결합하고 싶습니다 :

<Page.Resources> 
    <DesignData:ItemDesignDataVM x:Key="ItemDesignDataVM" /> 
</Page.Resources> 

<TextBox Text="{Binding ItemId}" /> 
<Image Source="{Binding WebThumbnail}" /> 

문제이다 상관없이 나는 BitmapImage 생성자에 전달 무슨 그것은 생성되지 않습니다. 나는 여러 가지 다른 상대 경로와 절대 경로를 시도했습니다.

XDesProc.exe 프로세스에 연결하고 해당 코드 경로를 디버깅하면 BitmapImage.PixelHeight 및 PixelWidth가 0 인 것으로 간주되어로드되지 않았 음을 의미합니다.

Designer에 ItemId가 표시되면서 제 바인딩이 정확합니다.

도움을 주시면 감사하겠습니다.

답변

0

이것이 실제 코드인지 의사 코드인지는 알 수 없지만 게시 한 것과 몇 가지 문제가 있습니다.

먼저 WebThumbnail 속성은 변경 알림을 지원하지 않습니다. 속성은 생성자에서 설정되었으므로 나중에 확인해야하지만 비동기 적으로 수행하도록 결정하면 바인딩이 발생한 후 속성이 채워질 수 있으며 변경 알림없이 UI가 업데이트되지 않습니다.

다음으로 ViewModel을 페이지 리소스로 만들었지 만 페이지의 DataContext로 설정 한 곳은 어디에도 없습니다. ViewModel은 반드시 리소스로 설정할 필요는 없으며 DataContext 또는 d : DataContext 속성에서 직접 설정할 수 있습니다. ItemId를 보았으므로이 리소스를 DataContext에 연결할 다른 곳에서 xaml 또는 코드를 사용하거나 텍스트 상자에 기본값을 가질 수 있습니까?

PixelWidth 및 PixelHeight가 0 인 이유는 생성자를 호출 한 직후와 BitmapImage가 실제로 이미지 데이터를 비동기식으로 다운로드하기 전에 확인한 것일 수 있습니다. 이 값은 실제로 나중에 채워질 수 있지만 페이지의 DataContext를 제대로 설정하지 않으면 이미지가 표시되지 않습니다.

실제 상황이 아니라면 URL에 문제가있을 수 있습니다. 먼저 알려진 이미지의 URL을 온라인으로 시도하십시오. 브라우저에서 URL이 작동하는지 확인한 다음 코드에서 시도하십시오. URL이 로컬 파일 인 경우 ms-appx : ///과 같은 특수 접두사가 프로젝트에 포함되어 있으면 ms-appdata : /// local/... 앱 로컬 폴더에있는 경우 앱 로밍 폴더 등에있는 경우 ms-appdata : /// roaming/... (3 개의 슬래시에 유의하십시오).

도움이 되길 바랍니다 ...

+0

철저한 답변을 보내 주셔서 감사합니다. 그것은 많은 도움이됩니다. 웹 페이지에서 이미지를로드하면 디자인 모드에서 이미지가 내보기에 표시됩니다. 이는 로컬 파일을 가리킬 때 URL이 잘못되었다는 것을 의미합니다. 약자에 대한 사과드립니다. DataContext를 위로 올려 놓지 않은 XAML에서 DataContext를 위로 설정하고 생성자 외부에 아무것도 설정하지 않았으므로 PropertyChanged 코드를 신경 쓰지 않았습니다. –

+0

ms-appx : /// {ImageName}을 사용하여 작업하고 있습니다. Windows.Storage.ApplicationData.Current.LocalFolder.Path는 임의의 생성 된 경로를 반환하므로 ms-appdata : /// local (또는 로밍)은 디자인 타임에 작동하는지 잘 모르겠습니다. –

관련 문제