Как правильно предоставить статический XML-ресурс и связать комбинированный список? - PullRequest
0 голосов
/ 07 июня 2018

Всем доброго времени суток!

У меня проблема с привязкой статического ресурса 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>

Проблема, с которой я столкнулся, лучше всего проиллюстрирована на следующем рисунке:

ComboBox fills all items with first value

Кто-нибудь знает, как заполнить ComboBox всеми различными записями, предоставленными в статическом XML-ресурсе?Целью является ресурс данных, который может быть отредактирован пользователями в будущем.Они должны иметь возможность создавать, редактировать и удалять поставщиков услуг.Но сначала все провайдеры должны быть видны.

1 Ответ

0 голосов
/ 07 июня 2018

Так как вы уже выбрали поставщика услуг в вашем DataContext, вам следует указать только свойство, которое вы хотите отобразить в ItemTemplate

<DataTemplate x:Key="ServiceProviderDataTemplate">
       <TextBlock Text="{Binding XPath=@name}"></TextBlock>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...