У меня есть проект в wpf, который я разрабатываю, и я использую элемент управления TreeView.Внутри структуры подэлемента я поместил StackPanel, а внутри него - некоторые другие компоненты.Textbox, Checbox и ImageView.Мне нужно получить данные из соответствующего элемента флажка с установленным флажком true, но я не знаю, как это сделать с помощью обычных событий флажка.При попытке использовать событие MouseDouble для получения данных из элемента.
Это структура проекта.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassModel
{
public class Base
{
public int Id { get; set; }
public string Nome { get; set; }
public string Descricao { get; set; }
public Tipo Tipo { get; set; }
public ICollection<Email> Emails { get; set; }
public ICollection<Telefone> Telefones { get; set; }
public Base()
{
Emails = new List<Email>();
Telefones = new List<Telefone>();
}
override
public string ToString()
{
return Nome;
}
}
}
Класс Contato
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassModel
{
public class Contato:Base
{
public virtual ContatoJuridico ContatoJuridico { get; set; }
public Departamento Departamento { get; set; }
public string ToDetalhes()
{
return Nome + " - " + Departamento;
}
}
}
Класс ContatoJuridico
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassModel
{
/// <summary>
/// Nos casos em que a categoria do objeto for Auditoria ou Organização_Social os atributos
/// Auditoria e OrganizacaoSocial são nulos
/// </summary>
public class ContatoJuridico:Base
{
public Categoria Categoria { get; set; }
public virtual ContatoJuridico Auditoria { get; set; }
public virtual ContatoJuridico OrganizacaoSocial { get; set; }
public ICollection<Contato> Contatos { get; set; }
public ICollection<ContatoJuridico> Juridicos { get; set; }
public ContatoJuridico()
{
//Contatos = new List<Contato>();
Contatos = new ObservableCollection<Contato>();
Juridicos = new List<ContatoJuridico>();
}
}
}
XAML Этофрагмент кода, который отображает мой TreeView
<ScrollViewer Grid.Column="0" Grid.Row="0" Grid.RowSpan="2">
<TreeView x:Name="trViewContatos" MouseDoubleClick="TrViewContatos_MouseDoubleClick">
<TreeView.Resources>
<HierarchicalDataTemplate x:Name="data" DataType="{x:Type fild:ContatoJuridico}" ItemsSource="{Binding Contatos}">
<StackPanel x:Name="stack" Orientation="Horizontal">
<Image Source="/Imagens/pessoaJuridica1.png" Height="15" Width="15" Margin="0,0,5,0" />
<CheckBox x:Name="chMaster" Checked="ChMaster_Checked"></CheckBox>
<TextBlock Text="{Binding Nome}" IsEnabled="False"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type fild:Contato}" ItemsSource="{Binding Emails}">
<StackPanel Orientation="Horizontal">
<Image Source="/Imagens/usuário-png-8.png" Height="15" Width="15" Margin="0,0,5,0" />
<CheckBox x:Name="chItem" Checked="ChItem_Checked"></CheckBox>
<TextBlock Text="{Binding Nome}" IsEnabled="False"/>
</StackPanel>
</HierarchicalDataTemplate>
<!--<DataTemplate DataType="{x:Type fild:Contato}">
<StackPanel Orientation="Horizontal">
<Image Source="/Imagens/usuário-png-8.png" Height="15" Width="15" Margin="0,0,5,0" />
<CheckBox x:Name="chItem" Checked="ChItem_Checked"></CheckBox>
<TextBlock Text="{Binding Nome}" IsEnabled="False"/>
</StackPanel>
</DataTemplate>-->
</TreeView.Resources>
</TreeView>
XAML.CS В этом коде я получаю двойной щелчок по элементу дерева
private void TrViewContatos_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
try
{
if (trViewContatos.SelectedItem is ContatoJuridico)
{
ContatoJuridico cc = trViewContatos.SelectedItem as ContatoJuridico;
foreach (Email em in cc.Emails)
{
emails.Add(em);
}
MessageBox.Show($"Você selecionou o item {cc.ToString()}");
}
else
{
Contato cc = trViewContatos.SelectedItem as Contato;
foreach (Email em in cc.Emails)
{
emails.Add(em);
}
MessageBox.Show($"Você selecionou o item {cc.ToString()}");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Итак, мне нужно получить данные из элемента дерева, основываясь на событиях флажков.Вы можете мне помочь?