【问题标题】:How to set value of WPF ComboBox Item from C# Code如何从 C# 代码设置 WPF ComboBox 项的值
【发布时间】:2012-05-27 15:13:02
【问题描述】:

我正在像这样填充我的 WPF 组合框

foreach (Function fx in XEGFunctions.GetAll())
{
    ComboBoxItem item = new ComboBoxItem();
    item.Content = fx.Name;
    item.ToolTip = fx.Signature;               
    //item.( some property ) = fx.FunctionValue;
    cmbBoxTransformation.Items.Add(item);
}
cmbBoxTransformation.SelectedIndex = 0;

如何为每个 ComboBoxItem 设置不同的值。

【问题讨论】:

    标签: c# .net wpf xaml controls


    【解决方案1】:

    如果您要设置的值仅在后端使用,而不向用户显示,则 Tag 属性可能是您最好的选择。

    item.Tag = fx.FunctionValue;
    

    【讨论】:

    • 但是如果我对我有价值,我想显示在运行时选择的相应项目,其值为 this(一些文本),那么我认为它不会工作
    • 您可以使用 linq 查询很快找到它,但我并不完全清楚您要从您的问题中做什么
    • 好的,我将遍历 LINQ 查询以选择我在运行时具有其值的特定项目
    【解决方案2】:

    两种选择

    1. 您可以从 ComboBoxItem 创建派生类型,并在派生类型中定义属性。

    2. 您可以创建任意项目集合(使用您的自定义属性),并将 ComboBox.ItemsSource 设置为该集合,并将 DisplayMemberPath 设置为需要在组合框中显示的字段。

    Binding combobox to display source and binding source

    How SelectedValue and DisplayMemberPath saved my life

    【讨论】:

      【解决方案3】:

      这个小勾可能对某人有所帮助

      <ComboBox SelectedIndex="1" SelectedValuePath="Tag"  SelectedValue="{Binding SampleDept,Mode=OneWayToSource}" >
                                      <ComboBoxItem Content="8-bit" Tag="8"  ></ComboBoxItem>
                                      <ComboBoxItem Content="16-bit" Tag="16" ></ComboBoxItem>
                                      <ComboBoxItem Content="24-bit" Tag="24"></ComboBoxItem>
                                      <ComboBoxItem Content="32-bit" Tag="32"></ComboBoxItem>
                                  </ComboBox>
      
      public class SampleModel{
      
         public int SampleDept{
      
                  get { return _sampleDept; }
                  set {
                      
                      _sampleDept = value;
                  OnPropertyChanged("SampleDept");
                  }
              }
      }
      

      【讨论】:

        【解决方案4】:
        var listItems = val.Split('$');
        DataTemplate dt = new DataTemplate();
        var combo = new FrameworkElementFactory(typeof(ComboBox));
        combo.SetValue(ComboBox.ItemsSourceProperty, listItems);
        combo.SetValue(ComboBox.SelectedValueProperty, "Whatever");
        combo.SetBinding(ComboBox.SelectedValueProperty, new Binding("Value") { Source = mkvc });
        dt.VisualTree = combo;
        dt.Seal();
        

        将此添加到您想要添加组合框的任何编辑器模板 => mkvc 是一个用于保存我的数据的类

        PropertyDefinition pd = new PropertyDefinition();
        pd.EditorTemplate = dt;
        //rpg =>radPropertyGrid
        rpg.PropertyDefinitions.Add(pd);
        rpg.Item = propertyList;
        

        propertylist 是 myclass 的列表

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-11
          • 1970-01-01
          • 1970-01-01
          • 2013-03-17
          • 1970-01-01
          • 2020-12-24
          相关资源
          最近更新 更多