【问题标题】:How to correctly provide a static xml resource and bind a combobox?如何正确提供静态 xml 资源并绑定组合框?
【发布时间】:2018-06-07 09:49:25
【问题描述】:

大家好!

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

XML 文件(resources/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>

下图最好地说明了我面临的问题:

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

【问题讨论】:

    标签: c# xml wpf data-binding


    【解决方案1】:

    由于您已经在 DataContext 中选择了服务提供者,因此您应该只指定您希望在 ItemTemplate 中显示的属性

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

    【讨论】:

    • 非常感谢,成功了!
    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多