如何从C#代码中设置WPF ComboBox项的值

时间:2012-05-21 05:21:52

标签: c# .net wpf xaml controls

我正在填充我的WPF ComboBox

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设置一些不同的值。

4 个答案:

答案 0 :(得分:4)

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

item.Tag = fx.FunctionValue;

答案 1 :(得分:2)

两个选项

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

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

  3. Binding combobox to display source and binding source

    How SelectedValue and DisplayMemberPath saved my life

答案 2 :(得分:1)

这个小刻度可以帮助某人

<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");
            }
        }
}

答案 3 :(得分:0)

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();

将此添加到编辑器模板中,无论您要将组合框添加到其中=>&gt; mkvc是一个用于保存数据的类

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

propertylist是myclass的列表