Привязать атрибут XML только в XAML - PullRequest
0 голосов
/ 05 октября 2011

У меня есть несколько простых 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 голосов
/ 05 октября 2011

Вы объявляете именованный шаблон данных внутри Resources, но никогда не используете его. Это похоже на инициализацию переменной внутри метода, но никогда не использует ее значение: она ничего не делает.

Чтобы сделать то, что вы хотите, назначьте шаблон для свойства ItemTemplate :

<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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...