仅在XAML中绑定XML属性

时间:2011-10-05 17:17:14

标签: xml xaml

我下面有一些简单的XAML,我的问题是,为什么文本不显示在列表框中?我得到的只是两条可选线!

<Window x:Class="DataTemplateEditor.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.DataContext>
        <XmlDataProvider Source="datatemplate.xml" XPath="Tables/Table" />
    </Grid.DataContext>
    <DockPanel HorizontalAlignment="Stretch" Name="dockPanel1" VerticalAlignment="Stretch">
        <ListBox Name="listBox1" Width="150" DockPanel.Dock="Left" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True">
            <ListBox.Resources>
                <DataTemplate x:Key="MyDataTemplate">
                    <StackPanel Orientation="Vertical">
                        <TextBlock Text="{Binding XPath=@Name}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.Resources>
        </ListBox>
        <ListView Name="listBox2" DockPanel.Dock="Right" />
    </DockPanel>
</Grid>

<?xml version="1.0" encoding="utf-8" ?>
<Tables>
  <Table Name="People">
    <Field Name="id" Type="Number" PrimaryKey="true" Indexed="true" AllowNull="false"/>
    <Field Name="FirstName" Type="Number" PrimaryKey="true" Indexed="true" AllowNull="false"/>
  </Table>
  <Table Name="Purchases">
      <Field Name="id" Type="Number" PrimaryKey="true" Indexed="true" AllowNull="false"/>
  </Table>
</Tables>

1 个答案:

答案 0 :(得分:0)

您在Resources中声明了一个命名数据模板,但您永远不会使用它。这就像在方法中初始化变量,但从不使用它的值:它没有做任何事情。

要执行您想要的操作,请将模板指定给the ItemTemplate property

<ListBox ItemsSource="{Binding}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical">
                <TextBlock Text="{Binding XPath=@Name}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

但我认为StackPanel在那里是不必要的。更重要的是,整个模板是不必要的,您只需使用DisplyMemberPath

<ListBox ItemsSource="{Binding}" DisplayMemberPath="@Name" />