Выбрать значение элемента на основе выбора флажка - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть проект в 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);
            }
        }

Итак, мне нужно получить данные из элемента дерева, основываясь на событиях флажков.Вы можете мне помочь?

...