我有一個WPF TreeView
已經在運行時從XML文件填充。我點擊一個按鈕,一個FileDialog
框出現,然後我選擇一個XML文件。然後將XML文件加載到TreeView
中。我使用了XmlDataProvider
和一些HierarchicalDataTemplate
來加載XML。如何選擇已使用XmlDataProvider填充的WPF TreeViewItem?
我已經添加了一個TreeView的動作處理程序,但是當我選擇該TreeView的一個項目時,我無法找到該項目的任何引用。我只找到第一個元素的參考。
我該如何解決這個問題?
的XAML是:
<Window x:Class="Demo2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="600" Width="800">
<Window.Resources>
<XmlDataProvider x:Key="MEIInformation" XPath="/MEI" />
<HierarchicalDataTemplate DataType="Case" ItemsSource="{Binding}">
<TextBlock Text="{Binding [email protected]}"></TextBlock>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="Phase" ItemsSource="{Binding}">
<TextBlock Text="{Binding [email protected]}"></TextBlock>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="Trigger" ItemsSource="{Binding}">
<TextBlock Text="{Binding [email protected]}"></TextBlock>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<ToolBarTray>
<ToolBar>
<Button ToolTip="Open Test Suite" Click="OpenTestSuite">
<Image Source="Icons/open.png"></Image>
</Button>
</ToolBar>
</ToolBarTray>
<TreeView x:Name="trv" FontSize="14" Height="518" HorizontalAlignment="Left" Margin="6,31,0,0" VerticalAlignment="Top" Width="431">
<TreeViewItem ItemsSource="{Binding Source={StaticResource MEIInformation}, XPath=*}" Header="Suites"></TreeViewItem>
</TreeView>
</Grid>
</Window>
和代碼snippest是:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.trv.MouseRightButtonUp+=new MouseButtonEventHandler(DoSomething);
}
private void OpenTestSuite(object sender, RoutedEventArgs e)
{
XmlDocument xmlDocument = new XmlDocument();
OpenFileDialog open = new OpenFileDialog();
open.Filter = "XML Files (*.xml)|*.xml";
if (open.ShowDialog() == true)
{
xmlDocument.Load(open.FileName);
XmlDataProvider dataProvider = this.FindResource("MEIInformation") as XmlDataProvider;
dataProvider.Document = xmlDocument;
}
}
private void DoSomething(object sender, MouseEventArgs e)
{
MessageBox.Show("Do Something in TreeView!");
TreeViewItem childItem = e.Source as TreeViewItem;
if (childItem != null)
{
MessageBox.Show(childItem.Header.ToString()); // or MessageBox.Show(childItem.toString);
childItem.IsSelected = true;
}
else
MessageBox.Show("No Selected Item!");
}
}
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<MEI>
<Case Name="Jean Price">
<Phase Name="January">
<Trigger Name="Order # JAN001"></Trigger>
<Trigger Name="Order # JAN002"></Trigger>
</Phase>
<Phase Name="February">
<Trigger Name="Order # FEB001"></Trigger>
</Phase>
</Case>
<Case Name="John P Grant">
<Phase Name="April">
<Trigger Name="Order # APR001"></Trigger>
<!-- ... -->
</MEI>
我只是想有該項目的參考,這樣我可以在該項目後添加新項目。
@Mart 我已經改變了在這樣的XAML樹視圖...(添加SelectedItemChanged = 「DoSomething的」)......
<TreeView SelectedItemChanged="DoSomething"....../>
和C#代碼現在... ...
private void DoSomething(object sender, EventArgs e)
{
MessageBox.Show("Do Something in TreeView!");
TreeViewItem childItem = sender as TreeViewItem;
if (childItem != null)
{
MessageBox.Show(childItem.Header.ToString());
childItem.IsSelected = true;
MessageBox.Show("It Works!");
}
else
MessageBox.Show("No Selected Item!");
}
但是根本沒有運氣。我還沒有明白烏爾的UIElement sugestion ... :(
能否請您在這裏粘貼代碼段以便我們可以找出究竟出了什麼問題 – 2011-05-26 11:36:10
這個xml是:這個xml文件是: <?XML版本= 「1.0」 編碼= 「ISO-8859-1」?> <案例名稱= 「讓價」> <階段名稱= 「一月」> \t \t <觸發器名稱=」訂單號JAN001 「> \t \t \t \t <觸發器名稱=」 訂單#JAN002 「> \t \t <階段名稱=」 二月 「> \t \t <觸發器名稱=」 訂單#FEB0 01 「> \t \t <案例名稱=」 約翰·P格蘭特 「> <階段名稱=」 四五 「> \t \t <觸發器名稱=」 訂單#APR001" > \t \t \t \t <觸發器名稱= 「訂單#APR002」> \t \t \t <相位名稱= 「月」> \t \t <觸發器名稱= 「訂單#MAY001」> \t \t \t –
2011-05-26 12:16:26