2017-03-22 46 views
0

的App.xaml访问XAML资源CS

<XmlDataProvider x:Key="ListData" Source="Resources\ListData.xml" XPath="/Data"/> 

我能在XAML随时随地访问这个。

但是...... MainWindow.xaml.cs

InitializeComponent(); 
model.SetResource(this.FindResource("ListData")); 

在构造App()MainWindow(),this.Resources.Count = 0 this.FindResource("ListData")回报与正确Source但空DataDocument的对象。

  • 来源{资源\ ListData.xml}的System.Uri

Model.cs:

internal void SetResource(object v) 
    { 
     _listData = (System.Windows.Data.XmlDataProvider)v; 
     _listData.InitialLoad(); 
    } 

这将运行没有异常或错误返回,但没有数据产生的。

_listData.Error null System.Exception 
_listData.Document null System.Xml.XmlDocument 
_listData.Data null object 

如何在XAML和cs之间共享资源?


file propertyBuild Action设置为Resource。这应该暗示该文件位于“namespace.filename.extension”下的清单中,其中namespace是Visual C#项目中的DefaultNamespace属性的值。

我失败,下面找到它:

 System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); 
     System.Reflection.ManifestResourceInfo listDataInfo = assembly.GetManifestResourceInfo("MyNamespace.ListData.xml"); 
+0

这里有提出类似的问题,但我不希望将资源复制到输出目录:http://stackoverflow.com/a/6151003/2091951 –

+0

如果我让生成操作EmbeddedResource它显示在'assembly.GetManifestResourceNames()'中,但不能在xaml中访问。 –

+0

使用ResourceManager可能会有其他解决方案。 查看附件项目:https://www.codeproject。COM /用品/ 835140 /一更的时间大约资源-VS-embeddedresource –

回答

0

好吧,这真的感觉就像一个黑客攻击,但它似乎工作。你可以使用这个任何运营商的控制,我只是碰巧需要一个ComboBox ...

中的.xaml文件

<ComboBox Loaded="List_Port_Loaded" Tag="{Binding Source={StaticResource ListData}, XPath=Valves}" /> 
中的.cs

文件

private void List_Port_Loaded(object sender, RoutedEventArgs e) 
    { 
     XmlElement valveXML = ((ComboBox)sender).Tag as XmlElement; 
    } 

我愿意接受一个更好的答案...

0

的App.xaml:

<XmlDataProvider x:Key="ListData" Source="Resources\ListData.xml" XPath="/Data" IsInitialLoadEnabled="True" IsAsynchronous="False"/> 

MainWindow.xaml.cs:

InitializeComponent(); 
model.SetListData((this.FindResource("ListData") as System.Windows.Data.XmlDataProvider).Document); 

这XmlDocument的完全填充。

Reference: How-to access XmlDataProvider's data as XmlDocument from code behind?