2011-04-30 3 views
3

현재 xml 파일을 리소스로 추가하려면 다음 XAML 코드를 사용하고 있습니다.리소스 추가 방법 : xml 파일

<XmlDataProvider x:Key="MyData" Source="D:\myfile.xml" XPath="Books/Book" /> 

이제이 이식성을 높이기 위해 % appdata % 폴더의 myfile.xml을 사용하고 싶습니다. 분명히 Source = "% appdata % \ myfile.xml"을 사용하면 XAML에서 "%"문자가 허용되지 않으므로이 작동하지 않습니다.

따라서이 리소스를 프로그래밍 방식으로 기본 윈도우 코드에 추가하고 싶습니다. 나는 시도했다 :

public MainWindow() 
{ 
    this.Resources.Add("MyData", "D:\\myfile.xml"); 
    InitializeComponent(); 
} 

그러나 XPath = ""Resources.xls "속성을 사용할 수 없다. 따라서 응용 프로그램이 제대로 작동하지 않는다.

이 속성을 설정하는 방법이 있습니까? 아니면 내가 잘못하고있는거야?

이것에 대한 Google 답변이 없습니다.

대단히 감사합니다.

답변

0

: 핵심 "을 MyData"와 문자열 값을 "Recources에 추가됩니다

this.Resources.Add("MyData", "D:\\myfile.xml"); 

이후

public MainWindow() 
{ 
    XmlDataProvider provider = new XmlDataProvider() 
    provider.Source = new Uri(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\myfile.xml"); 
    provider.XPath = "Books/Book"; 
    this.Resources.Add("MyData", provider); 
} 

이 자원을 추가 할 수있는 올바른 코드입니다 D : \ myfile.xml "

또는 XAML 선언을 계속 사용하고 생성자에서 다음을 추가 할 수 있습니다.

(this.Resources["MyData"] as XmlDataProvider).Source = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\myfile.xml"; 
(this.Resources["MyData"] as XmlDataProvider).XPath = "Books/Book"; 

마지막 해결책을 제안합니다.

+0

감사합니다. Mattias, 제 2 해결 방법과 함께 작동합니다. 방금 변경해야만했습니다. Uri booksfile_path = new Uri (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData) + "\\ myfile.xml"); .Source 메서드는 문자열이 아니라 Uri를 대신 받아들입니다. –

+0

한 가지 사실은이 구현에서 이제는 거의 5 초와 같이 XML 콘텐츠 (목록 상자에 표시 함)를로드하는 데 더 많은 시간이 걸리는 것입니다. 전에 1 초 같았습니다. 이걸 단축하기 위해 내가 할 수있는 일 이라니? –

+0

나는 kkow를하지 않습니다 ... 그러나, 나는 다른 사용자가 더 많은 참고를 위해 당신의 코드로 나의 게시물을 수정하고 있습니다. –