这是简化的XML:
<Product> <Name>Red Chair</Name> <Price>29.5</Price> </Product>
这是简化的XAML,其中列表框将显示每个条目的名称和价格:
<ListBox Name="listBox1" ItemsSource="{Binding}" Margin="10" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text={Binding XPath=./Name} />
<TextBlock Text={Binding XPath=./Price} />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如何在我的C#代码中执行LINQ查询,以便我可以执行:
var products = from ... /* I need code between here and next statement */
listBox1.DataContext = products;
并使用我的XML文件中的条目填充列表框?感谢。
答案 0 :(得分:4)
你可以尝试:
var products = doc.Descendants("Product")
.Select(x => new { Name = (string) x.Element("Name"),
Price = (decimal) x.Element("Price") });
这不是真的很清楚这是否是你想要的,但它可能是......你会想要将绑定更改为:
<TextBlock Text={Binding Name} />
<TextBlock Text={Binding Price} />
您可能还想调用ToList
来实现查询一次 - 我对XAML绑定知之甚少,以了解它是否适合您。 (我想它确实如此,但是......)
答案 1 :(得分:0)
如果您仍然坚持使用XML绑定:-),您可以使用XmlDataProvider
:
<Window.Resources>
<XmlDataProvider Source="data.xml" XPath="Products/Product" x:Key="xmlData">
</XmlDataProvider>
</Window.Resources>
<Grid>
<ListBox Name="listBox1" ItemsSource="{Binding Source={StaticResource xmlData}}" Margin="10" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding XPath=Name}" />
<TextBlock Text="{Binding XPath=Price}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
前面的代码段假设您有一个类似于:
的data.xml文件<Products>
<Product>
<Name>Product 1</Name>
<Price>100</Price>
</Product>
<Product>
<Name>Product 2</Name>
<Price>200</Price>
</Product>
</Products>
当然,您可以通过编程方式设置Source
的{{1}}属性:
XmlDataProvider
再次,只是一个FYI!