【问题标题】:wpf get value by name?wpf 按名称获取值?
【发布时间】:2016-01-03 11:03:46
【问题描述】:

在 c# 上的 WPF 上我有组合框

     <ComboBox x:Name="listCombobox" />

然后我添加它像

var list = new[]
 { 
new { Number = 1, Name = "Smith" },
new { Number = 12, Name = "John" } ,
new { Number = 14, Name = "Bon" } 

}.ToList();

foreach (var item in list)
{
   listCombobox.Items.Add(item.Name);
 }

我想在组合框中看到名称(就像现在一样)

但是当我选择时,在后面的代码中我会看到不是我选择的名称 我想查看选中的号码

谢谢!

【问题讨论】:

标签: c# wpf combobox


【解决方案1】:

这样定义一个类

public class dataObject 
{
   public  int Number { get; set; }
   public string Name { get; set; }            
}

并填充数据,

         List<dataObject> bindingList = new List<dataObject>();          
         bindingList.Add(new dataObject()
         {
             Name = "Smith",
             Number = 1
         });
         bindingList.Add(new dataObject()
         {
             Name = "John",
             Number = 12
         });
         bindingList.Add(new dataObject()
         {
             Name = "Bon",
             Number = 14
         });
        listCombobox.ItemsSource = bindingList;
        listCombobox.DisplayMemberPath = "Name";

在组合框的 selectionChanged 事件中,执行此操作,

private void listCombobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            dataObject result = (dataObject)listCombobox.SelectedItem;
            var selectedNumber = result.Number;           
        }

【讨论】:

    【解决方案2】:

    我会使用自定义 ListItem 类并将这种类型的对象分配给组合框控件的 ItemSource 属性,如下所示:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
    
            var list = new List<ListItem>
             {
                new ListItem{ Value = 1, Text = "Smith" },
                new ListItem{ Value = 12, Text = "John" } ,
                new ListItem{ Value = 14, Text = "Bon" }
            }.ToList();
    
            listCombobox.ItemsSource = list;
            listCombobox.DisplayMemberPath = "Text";
            listCombobox.SelectedValuePath = "Value";
        }
    
        private void listCombobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var selectedItem = (sender as ComboBox).SelectedItem as ListItem;
            if (selectedItem != null)
            {
                // do something with the selected item
            }
        }
    }
    
    public class ListItem
    {
        public string Text { get; set; }
        public int Value { get; set; }
    }
    

    【讨论】:

      【解决方案3】:

      我会这样解决:

      ...
      
      foreach (var item in list)
          listCombobox.Items.Add(new ComboBoxItem() {
              Content = item.Name,
              Tag = item.Number
          });
      

      您当然可以使用检索您的数据

      int mytag = listCombobox.Items[3].Tag;
      

      或

      int seletected = listCombobox.SelectedItem.Tag;
      


      PresentationFramework.dll::System.Windows.Frameworkelement.Tag 的 MSDN 参考

      【讨论】:

      【解决方案4】:

      我认为最简单的方法是将这些数字作为每个 listCombobox 项目的标签:

      foreach (var item in list) {
          listCombobox.Items.Add(new ComboBoxItem { Content = item.Name, Tag = item.Number });
      }
      

      并访问您的号码(例如OnSelectedItemchanged):

      void Cb_SelectionChanged(object sender, SelectionChangedEventArgs e) {
          int number = (int)((ComboBoxItem) listCombobox.SelectedItem).Tag;
      }
      

      【讨论】:

      • 请问如何?可以举个例子吗?
      猜你喜欢
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 2016-04-24
      • 1970-01-01
      • 2016-12-07
      • 2018-01-06
      • 2012-12-16
      相关资源
      最近更新 更多