【问题标题】:How to add Item to ComboBox from UI?如何从 UI 向 ComboBox 添加项目?
【发布时间】:2013-05-29 06:14:23
【问题描述】:

好吧,也许我有点愚蠢,但我找不到将项目添加到我的Combobox 并将其作为SelectedItem 的方法。那我错过了什么?

当前代码

LoginV.XAML

<ComboBox Height="23" Margin="102,2,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="155"
          IsEditable="True" 
          DisplayMemberPath="Loginname"
          ItemsSource ="{Binding alleBenutzer}"
          SelectedItem="{Binding selectedBenutzer}"/>

LoginVM.CS

    public List<User> alleBenutzer{ get; set; }
    public User selectedBenutzer
    {
        get { return _selectedBenutzer; }
        set
        {
            _selectedBenutzer = value;

            if (selectedBenutzer != null)
            {
                //do stuff
            }

            RaisePropertyChanged(() => Reg(() => benutzerEinrichtungen));
        }
    }

User.cs

public class User
    {
        public int Id { get; set; }
        public string Loginname { get; set; }
    }

总结

我如何提供以下行为?
用户运行应用程序在Combobox 控件中添加了单词“Admin”,这将导致SelectedItem != null,以便我可以执行if(selectedBenutzer.Loginname =="Admin") DoStuff;

【问题讨论】:

  • 您的问题被MVVM标记。为什么要从 UI 添加项目,而不是从视图模型中添加?
  • @Dennis ok Add 可能是错误的词,但我想要一个不应该在列表中的隐藏用户(管理员),因此用户必须在组合框中添加单词“管理员”来激活它用户

标签: c# wpf mvvm combobox


【解决方案1】:

使用ObservableCollection 代替List 代表alleBenutzer

private ObservableCollection<string> _alleBenutzer;
public ObservableCollection<string> alleBenutzer
{
    get
    {
        return _alleBenutzer;
    }
    set
    {
        _alleBenutzer= value;
        RaisePropertyChanged("alleBenutzer");
    }
}
  1. 添加按钮Add user

  2. AddUser() 方法添加到您的ViewModel

    public void AddUser() { alleBenutzer.Add(new User {...}); }

  3. RelayCommand 分配给按钮的Click 事件。

  4. 将相同的RelayCommand 分配给您的AddUser() 方法ViewModel

【讨论】:

  • 好的,给我展示一个工作示例,你将如何从 UI 中执行...,因为这仅适用于代码隐藏或 Viewmodel AFAIK
  • 啊,我当然可以这样做,但它必须在 Combox 中,因为它应该是隐藏用户(管理员),所以插入的登录名将是触发器
  • it has to be in the Combox 是什么意思? 是什么?
  • 对不起我的英语,我的意思是新用户的插入/添加必须通过组合框控件。它在我们的功能规范文档中定义为安全“功能”
  • 那么你必须使用ComboBox的正确事件而不是按钮的Click事件
【解决方案2】:

好的,经过进一步研究后发现我需要绑定到包含我正在寻找的值的 Text 属性

这里是一个简单的例子

XAML

    <ComboBox Height="23" HorizontalAlignment="Left" Margin="89,23,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" 
              IsEditable="True"                  
              ItemsSource="{Binding mySimpleItems}"
              SelectedItem="{Binding mySimpleItem}"
              Text="{Binding myNewSimpleItem}"/>

代码

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new SimpleVM();
        }
    }

    public class SimpleVM
    {    
        private string _mySimpleItem;
        private string _myNewSimpleItem;
        private bool isNew = true;

        #region properties

        public ObservableCollection<string> mySimpleItems { get; set; }

        public string mySimpleItem
        {
            get { return _mySimpleItem; }
            set
            {
                _mySimpleItem = value;
                if (_mySimpleItem != null)
                {
                    isNew = false;
                    MessageBox.Show(_mySimpleItem);
                }
                else
                    isNew = true;
            }
        }

        public string myNewSimpleItem
        {
            get { return _myNewSimpleItem; }
            set
            {
                _myNewSimpleItem = value;

                //if SelectedItem == null
                if (isNew) 
                    if (_myNewSimpleItem == "Super")
                    {
                        mySimpleItem = _myNewSimpleItem;
                        mySimpleItems.Add(_myNewSimpleItem);                            
                    }
            }
        }

        #endregion

        #region cTor

        public SimpleVM()
        {
            var ObCol = new ObservableCollection<string>();

            ObCol.Add("Max");
            ObCol.Add("Dennis");
            ObCol.Add("Lucas");

            mySimpleItems = ObCol;
        }

        #endregion
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多