WPF XML привязка данных к ComboBox - PullRequest
1 голос
/ 30 августа 2010

HI All,

Я пытаюсь связать некоторый XML в комбинированный список, используя следующий код:

        <UserControl
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     x:Name="myComboBoxControl">
        <UserControl.Resources>
            <DataTemplate x:Key="dataTemplateNode">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" MinWidth="20"/>
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Text="{Binding XPath=@LCode}" Grid.Column="0" Margin="5,0,0,0" FontWeight="Bold"/>
                    <TextBlock Text="{Binding  XPath=.}" Grid.Column="1"/>
                </Grid>
            </DataTemplate>

            <XmlDataProvider x:Key="xmlNodeList" Source="/data/LocationCodes.xml" XPath="/LocationCodes/Location"/>
        </UserControl.Resources>

        <ComboBox Name="LocationCombo" 
                  ItemsSource="{Binding Source={StaticResource xmlNodeList}}"  
                  ItemTemplate="{StaticResource dataTemplateNode}" 
                  SelectedValue="{Binding XPath=@LCode}" 
                  HorizontalContentAlignment="Stretch" Height="23" />
    </UserControl>

Проект работает нормально, и я вижу заполненный ComboBox, как и ожидалось.однако, когда я пытаюсь получить выбранное значение в коде, все, что я получаю, это пустая / пустая строка:

string compName = this.LocationCombo.SelectedValuePath.ToString();
                MessageBox.Show(compName);

XML-файл выглядит следующим образом:

<LocationCodes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Location LCode="ABD1W">Aberdeen</Location>
<Location LCode="ATH1W">Athens</Location>
</LocationCodes>

1 Ответ

2 голосов
/ 30 августа 2010

Попробуйте получить свойство ComboBox.SelectedItem, приведите его к XmlNode и используйте его вместо этого. Примерно так:

XmlNode element = this.LocationCombo.SelectedItem as XmlNode;
MessageBox.Show(element.Attributes["LCode"].Value.ToString() + element.InnerText.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...