How do I fill a combo I fill in the Value of it with wpf and c #

1

I made this code to populate a combobox. It works perfectly, however I need beyond the text to be presented in the combo, you also need to load a kind of Value, as we do on the web where we have Name and Value. I use WPF. If I fill the combo in design time like this:

<ComboBoxItem Content="Milho" Name="M"/>
            <ComboBoxItem Content="Soja" Name="S"/>
            <ComboBoxItem Content="Feijão" Name="F"/>

See that the name works as a Value and I can get this value in the code behind. This is code to populate the combo at runtime:

public void CarregaComboSecagem()
        {
            ListaSecagens lista = new ListaSecagens();
            ObservableCollection<string> listaCtg;

            var prod = lista.listaSecagens();

            listaCtg = new ObservableCollection<string>();

            foreach (var prd in prod)
            {
                listaCtg.Add(prd.Umidade.ToString());
            }

            cbxSecagem.ItemsSource = listaCtg;

        }

Prod is the listSecure:

public class ListaSecagens
    {
        private SiloContext contexto = new SiloContext();

        public List<Secagem> listaSecagens()
        {
            return contexto.Secagens.ToList();
        }
    }

My entity Drying

[Table("Secagem")]
    public class Secagem
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int IdSecagem { get; set; }
        public int IdProduto { get; set; }
        public decimal Umidade { get; set; }
        public decimal Desconto { get; set; }
        public decimal Valor_Sec { get; set; }
    }

My context

public class SiloContext : DbContext
    {
        public SiloContext()
            : base("SiloConn")
        {
            Database.SetInitializer<SiloContext>(null);
        }
        public DbSet<Produto> Produtos { get; set; }
        public DbSet<Balanca> Balancas { get; set; }
        public DbSet<Secagem> Secagens { get; set; }
    }
    
asked by anonymous 15.08.2017 / 18:56

1 answer

3

Place the source of the combo as the list of your objects, then you access the selected object with the SelectedValue property. Example:

In your case, as you explained in the chat, you should fill out the product combo in the Window Loaded event. When the user chooses an item, you must trigger the SelectionChanged event of the product combo, and load the Drying combo. Your code should look like this:

    private void Window1_Loaded(object sender, RoutedEventArgs e)
    {
        comboBoxProduto.ItemsSource = ProdutoDAO.GetProdutos(); //Seu método que retorna a List<Produto>
        comboBoxProduto.DisplayMemberPath = "Nome";
    }

    private void comboBoxProduto_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (comboBoxProduto.SelectedValue != null)
        {
            comboBoxSecagem.ItemsSource = SecagemDAO.GetSecagem(((Produto)comboBoxProduto.SelectedValue).Id);
            comboBoxSecagem.DisplayMemberPath = "Umidade";
        }
        else
            comboBoxSecagem.ItemsSource = null;
    }

Example Classes

public class Secagem
{
    public int IdSecagem { get; set; }
    public int IdProduto { get; set; }
    public decimal Umidade { get; set; }
    public decimal Desconto { get; set; }
    public decimal Valor_Sec { get; set; }
}

public class SecagemDAO
{
    public static List<Secagem> GetSecagem(int idProduto)
    {
        //codigo de selecionar a lista de acordo com o produto
        //return Context.Select(...Where...) //Exemplo!!!
        return new List<Secagem>();
    }

}

public class Produto
{
    public int Id { get; set; }
    public string Nome { get; set; }

}

public class ProdutoDAO
{
    public static List<Produto> GetProdutos()
    {
        //codigo do Select dos produtos
        //return Context.Select(...Where...) //Exemplo!!!
        return new List<Produto>(); 
    }
}
    
15.08.2017 / 19:18