我正在尝试从用户选择的同一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;
}
答案 0 :(得分:1)
您应该创建自己的类型来表示QueryName / Query组合,然后定义LINQ-to-XML,而不是将ComboBox
直接绑定到查询返回的XElement
。将元素投影到此类序列的查询。
然后,您可以将ComboBox
SelectedItem
绑定到数据上下文中的属性。
E.g:
查询类型
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
将为您提供所选的查询值。