LINQ绑定

Example 1

<?xml version="1.0" encoding="utf-8"?>
<PMPPPackageList>
  <PMPPPackage>
    <Number Header="No.">1</Number>
    <Name Header="Name">Project1.rspag</Name>
    <CreationTime Header="Creation Time">2023-02-08 13:56:08</CreationTime>
    <LastWriteTime Header="Last Write Time">2022-07-11 08:31:04</LastWriteTime>
  </PMPPPackage>
  <PMPPPackage>
    <Number Header="No.">2</Number>
    <Name Header="Name">PRT0703_Andover_R01.rspag</Name>
    <CreationTime Header="Creation Time">2022-11-10 09:28:33</CreationTime>
    <LastWriteTime Header="Last Write Time">2022-11-09 09:27:52</LastWriteTime>
  </PMPPPackage>
  <PMPPPackage>
    <Number Header="No.">3</Number>
    <Name Header="Name">stn1.rspag</Name>
    <CreationTime Header="Creation Time">2023-02-08 13:56:08</CreationTime>
    <LastWriteTime Header="Last Write Time">2022-07-11 08:33:01</LastWriteTime>
  </PMPPPackage>
</PMPPPackageList>

<ListView Name="listView_PMPPPackage2" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding}"  >
    <ListView.View>
        <GridView>
            <GridViewColumn Header="{Binding Path=Element[Number].Attribute[Header].Value}" Width="100" DisplayMemberBinding="{Binding Path=Element[Number].Value}"/>
            <GridViewColumn  Header="{Binding Path=Element[Name].Attribute[Header].Value}" Width="100" DisplayMemberBinding="{Binding Path=Element[Name].Value}"/>
        </GridView>
    </ListView.View>
</ListView>

this.listView_PMPPPackage2.DataContext = xDocument.Descendants("PMPPPackage");

Example 2

<?xml version="1.0" encoding="utf-8"?>
<PMPPPackageList>
  <Header>
    <Number>No.</Number>
    <Name>Name</Name>
    <CreationTime>Creation Time</CreationTime>
    <LastWriteTime>Last Write Time</LastWriteTime>
  </Header>
  <PMPPPackage>
    <Number>1</Number>
    <Name>Project1.rspag</Name>
    <CreationTime>2023-02-08 13:56:08</CreationTime>
    <LastWriteTime>2022-07-11 08:31:04</LastWriteTime>
  </PMPPPackage>
  <PMPPPackage>
    <Number>2</Number>
    <Name>PRT0703_Andover_R01.rspag</Name>
    <CreationTime>2022-11-10 09:28:33</CreationTime>
    <LastWriteTime>2022-11-09 09:27:52</LastWriteTime>
  </PMPPPackage>
  <PMPPPackage>
    <Number>3</Number>
    <Name>stn1.rspag</Name>
    <CreationTime>2023-02-08 13:56:08</CreationTime>
    <LastWriteTime>2022-07-11 08:33:01</LastWriteTime>
  </PMPPPackage>
</PMPPPackageList>

<ListView Name="listView_PMPPPackage2" Grid.Row="1" Grid.Column="0" ItemsSource="{Binding Path=Descendants[PMPPPackage]}"  >
    <ListView.View>
        <GridView>
            <GridViewColumn Header="{Binding Path=Element[Header].Element[Number].Value}" Width="100" DisplayMemberBinding="{Binding Path=Element[Number].Value}"/>
            <GridViewColumn  Header="{Binding Path=Element[Header].Element[Name].Value}" Width="100" DisplayMemberBinding="{Binding Path=Element[Name].Value}"/>
        </GridView>
    </ListView.View>
</ListView>

this.listView_PMPPPackage2.DataContext = xDocument.Root;

Example 3

<?xml version="1.0" encoding="utf-8"?>
<Solution Guid="bb3a4e75-dae5-472e-aca9-b6f66e36fd8c" Name="SolutionTwoRobots" DateCreated="2023-02-27 12:40:30">
<Recipe Guid="f9ce6b7b-fede-4548-aa7e-3a00c2354a7d" Name="Recipe_1">
	<Number>1</Number>
	<Version>1.0</Version>
	<DateCreated>2023-07-13 11:59:18</DateCreated>
	<RecipeState>None</RecipeState>
</Recipe>
<Recipe Guid="b54ce641-21b9-4acc-b3e2-5f97b506341a" Name="Recipe_2">
	<Number>2</Number>
	<Version>1.0</Version>
	<DateCreated>2023-07-13 11:59:18</DateCreated>
	<RecipeState>None</RecipeState>
</Recipe>
<Recipe Guid="eab4feec-02cb-4936-ae62-b613f0bedcee" Name="Recipe_3">
	<Number>3</Number>
	<Version>1.0</Version>
	<DateCreated>2023-07-13 11:59:18</DateCreated>
	<RecipeState>Selected</RecipeState>
</Recipe>
<Recipe Guid="db0efb54-81ee-45d5-aef5-f9c87e125bc1" Name="Recipe_4">
	<Number>4</Number>
	<Version>1.0</Version>
	<DateCreated>2023-07-13 11:59:18</DateCreated>
	<RecipeState>None</RecipeState>
</Recipe>
<Recipe Guid="92717692-32c0-4df0-88a6-a7cc55c1e93a" Name="Recipe_5">
	<Number>5</Number>
	<Version>1.0</Version>
	<DateCreated>2023-07-13 11:59:18</DateCreated>
	<RecipeState>None</RecipeState>
</Recipe>
<Recipe Guid="672288d6-98ba-4a1a-8464-ed578b4b754a" Name="Recipe_6">
	<Number>6</Number>
	<Version>1.0</Version>
	<DateCreated>2023-07-13 11:59:18</DateCreated>
	<RecipeState>None</RecipeState>
</Recipe>
</Solution>

<TextBlock Grid.Row="1" Grid.Column="0" Style="{StaticResource Style_Value}" Text="{Binding XPath=Number}"/>
<TextBlock Grid.Row="1" Grid.Column="1" Style="{StaticResource Style_Value}" Text="{Binding XPath=@Name}"/>
<TextBlock Grid.Row="1" Grid.Column="2" Style="{StaticResource Style_Value}" Text="{Binding XPath=Version}"/>
<TextBlock Grid.Row="1" Grid.Column="3" Style="{StaticResource Style_Value}" Text="{Binding XPath=DateCreated}"/>

private void LoadSolutionData()
{
	try
	{
		if (!Directory.Exists(this.DataDirectory))
		{
			this.ErrorMessage = "Data directory is invalid.";
			return;
		}

		string solutionDataPath = System.IO.Path.Combine(this.DataDirectory, $"RecipeList_{this.SolutionGuid}.xml");
		XmlDocument xmlDocument = new XmlDocument() { XmlResolver = null };
		xmlDocument.Load(solutionDataPath);

		XmlDataProvider xmlDataProvider = new XmlDataProvider();
		xmlDataProvider.Document = xmlDocument;
		xmlDataProvider.XPath = "Solution/Recipe";

		Binding binding = new Binding();
		binding.Source = xmlDataProvider;
		//binding.XPath = "*";
		BindingOperations.SetBinding(this.RowList, ListBox.ItemsSourceProperty, binding);
	}
	catch (Exception ex)
	{
		this.ErrorMessage = ex.Message;
	}
}