J'ai un WPF TreeView
qui a été rempli à partir d'un fichier XML lors de l'exécution. Je clique sur un bouton et une boîte FileDialog
apparaît, puis je sélectionne un fichier XML. Ensuite, le fichier XML est chargé dans le TreeView
. J'ai utilisé un XmlDataProvider
et quelques HierarchicalDataTemplate
s pour charger le XML.Comment sélectionner WPF TreeViewItem qui a été rempli à l'aide de XmlDataProvider?
J'ai ajouté un gestionnaire d'action avec TreeView, mais lorsque je sélectionne un élément de ce TreeView, je ne trouve aucune référence pour cet élément. Je ne trouve que la référence du premier élément.
Comment puis-je résoudre ce problème?
Le XAML est:
<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>
Et le code snippest est:
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>
Je veux juste avoir une référence de cet élément pour que je puisse ajouter un nouvel élément après cet élément.
@Mart J'ai changé la vue arborescente sur le XAML comme ça ... (ajouté SelectedItemChanged = "DoSomething") ...
<TreeView SelectedItemChanged="DoSomething"....../>
Et le code C# est maintenant ... ....
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!");
}
mais il n'y a pas de chance du tout. Et je ne l'ai pas compris ur UIElement Sugestion ... :(
Pouvez-vous s'il vous plaît coller l'extrait de code ici afin que nous puissions savoir exactement ce qui s'est passé –
le xml est: Le fichier xml est: Xml version = "1.0" encoding = "ISO-8859-1"?> \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t –