Получение элемента XML из элемента Combobox - PullRequest
0 голосов
/ 11 марта 2012

Я пытаюсь получить элемент XML в текстовом поле из выбранного пользователем элемента combox также из того же XML-файла.

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

 <ComboBox  Grid.Column="1" Height="21"  HorizontalAlignment="Left" Margin="0,32,0,0" Name="QueryChooser" VerticalAlignment="Top" Width="189" ItemsSource="{Binding}" SelectionChanged="QueryChooser_SelectionChanged" />

Мой xaml.cs

 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Queryslistload();
        }

        private void Queryslistload()
        {
            var xElem = XElement.Load(@"Querys.xml");

            var querys = from query in xElem.Descendants("QueryLay")
                         orderby query.Element("QueryName").Value
                         select query.Element("QueryName").Value;
            QueryChooser.ItemsSource = querys;

        }

Это сам мой XML-файл

<?xml version="1.0" encoding="utf-8"  standalone="yes" ?> 
<Querys>
    <QueryLay>
    <QueryID>
        1
    </QueryID>
    <QueryName>Check Logspace</QueryName>
    <Query>dbcc sqlperf(logspace)</Query>
    </QueryLay>
    <QueryLay>
    <QueryID>
        2
    </QueryID>
    <QueryName>Check Spaceused</QueryName>
    <Query>sp_spaceused</Query>
    </QueryLay>

    </Querys>

, так что теперь, если пользователь выбираетпроверить пространство журналов из выпадающего списка. Я хочу, чтобы элемент запроса отображался в текстовом поле

как мне этого добиться?

ОБНОВЛЕНО

public class Query
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Value { get; set; }
        }
        private void QueryChooser_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var xElem = XElement.Load(@"Querys.xml");
            var querys =  xElem.Descendants("QueryLay").Select( e => 
                new Query{
                         Id = Convert.ToInt32(e.Element("QueryID").Value),
       Name = e.Element("QueryName").Value,
       Value = e.Element("Query").Value
                         }).OrderBy(q=>q.Name)
                         select query.Element("QueryName").Value ;

            listBox1.ItemsSource = querys;
        }

1 Ответ

1 голос
/ 11 марта 2012

Вместо того, чтобы связывать ComboBox непосредственно с XElement, возвращенными из вашего запроса, вы должны создать свой собственный тип, который представляет комбинацию QueryName / Query, а затем определить запрос LINQ-to-XML, который проецируетэлементы к последовательности этого типа.

Затем можно связать ComboBox SelectedItem со свойством в контексте данных.

Например:

Тип запроса

public class Query
{
   public int Id { get; set; }
   public string Name { get; set; }
   public string Value { get; set; }
}

Контекст данных

var xElem = XElement.Load(@"Querys.xml");

this.Queries = xElem.Descendants("QueryLay").Select(e =>
     new Query 
     {
       Id = Convert.ToInt32(e.Element("QueryID").Value),
       Name = e.Element("QueryName").Value,
       Value = e.Element("Query").Value
     }).OrderBy(q => q.Name);

public Query SelectedQuery { get; set; }

Просмотр

<ComboBox ItemsSource="{Binding Queries}" 
    SelectedItem="{Binding SelectedQuery}" 
    DisplayMemberPath="Name"
    ... />

this.SelectedQuery.Valueв вашем контексте данных затем даст вам выбранное значение запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...