代码之家  ›  专栏  ›  技术社区  ›  deHaar

如何正确地提供静态XML资源并绑定组合框?

  •  0
  • deHaar  · 技术社区  · 6 年前

    大家好!

    我在将静态XML资源绑定到C WPF应用程序中的组合框时遇到问题。它基本上可以工作,但总是用xml文件中的第一个条目填充(正确数量的)条目。 请看一下我的代码:

    XML文件(XML文件) 资源/config/xml/serviceproviders.xml ):

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <ServiceProviders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <ServiceProvider name="Service Provider 1">
        </ServiceProvider>
        <ServiceProvider name="Service Provider 2">
        </ServiceProvider>
        <ServiceProvider name="Service Provider 3">
        </ServiceProvider>
        <ServiceProvider name="Service Provider 4">
        </ServiceProvider>
        <ServiceProvider name="Service Provider 5">
        </ServiceProvider>
    </ServiceProviders>
    

    包括绑定的xaml代码(只是 Grid 在主窗口中):

    <Grid Name="ServiceProviderGrid" 
                Grid.Row="0" 
                Grid.Column="0" 
                HorizontalAlignment="Stretch" 
                VerticalAlignment="Stretch">
        <Grid.DataContext>
            <XmlDataProvider x:Name="ServiceProviderData" 
                             Source="resources/config/xml/ServiceProviders.xml" 
                             XPath="/ServiceProviders/ServiceProvider">
            </XmlDataProvider>
        </Grid.DataContext>
        <Grid.Resources>
            <DataTemplate x:Key="ServiceProviderDataTemplate">
                    <TextBlock Text="{Binding XPath=/ServiceProviders/ServiceProvider/@name}"></TextBlock>
            </DataTemplate>
        </Grid.Resources>
        <Grid.ColumnDefinitions>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Label Name="ServiceProviderLabel" 
               Grid.Row="0" 
               Margin="10,10,10,5" 
               VerticalAlignment="Bottom">
               Service Provider
        </Label>
        <ComboBox ItemsSource="{Binding}"
                  ItemTemplate="{StaticResource ServiceProviderDataTemplate}"
                  Name="ServiceProviderComboBox"
                  IsSynchronizedWithCurrentItem="True"
                  Visibility="Visible"
                  Grid.Row="1" 
                  Margin="10,5,10,10" 
                  VerticalAlignment="Stretch" 
                  SelectedIndex="1" 
                  Cursor="Hand">
        </ComboBox>
    </Grid>
    

    我所面临的问题如下图所示:

    ComboBox fills all items with first value

    有人知道怎么填充 ComboBox 静态XML资源中提供了所有不同的条目? 目的是将来用户可以编辑的数据资源。他们能够创建、编辑和删除服务提供商。但首先,所有的提供者都必须是可见的。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Shivani Katukota    6 年前

    因为您已经在datacontext中选择了服务提供者,所以您应该只指定要在itemtemplate中显示的属性

    <DataTemplate x:Key="ServiceProviderDataTemplate">
           <TextBlock Text="{Binding XPath=@name}"></TextBlock>
    </DataTemplate>