如何通过单击没有任何代码隐藏的按钮将列表框中的项目添加到列表中?

Iri*_*son 6 wpf listbox mvvm

我是MVVM的新手,也是WPF的新手.事实上,几个月前我开始编程.MVVM非常适合我的绑定概念,我已经尝试了几天,只是简单地创建一个允许您从listbx中选择项目的应用程序,当您单击添加按钮时,所选项目应该是保存在新列表中.第二个列表框显示添加的最新项目,您可以选择一个项目并使用另一个按钮将其删除.通常我会去点击事件并用很少的方法装饰我的代码隐藏,但我真的想通过使用绑定和没有代码隐藏来学习如何做到这一切.我会非常高兴得到任何帮助,请记住,我是新手,我真的希望尽可能简单:)与亲切的问候Daniela

<WrapPanel HorizontalAlignment="Center" Margin=" 10">
   <ListBox x:Name="Firstbox" 
            Width="100"
            ItemsSource="{Binding FoodList}"
            DisplayMemberPath="Name" >
   </ListBox>
   <Button Margin="10 >Select</Button>
   <ListBox Width="100"></ListBox>
Run Code Online (Sandbox Code Playgroud)

private List _foodList;

    public List<FoodItem> FoodList
    {
        get { return _foodList; }
        set { _foodList = value; }
    }

    private List<FoodItem> _newFoodList;

    public List<FoodItem> NewFoodList
    {
        get { return _newFoodList; }
        set { _newFoodList = value; }
    }

    public MainViewModel()
    {
        InitializeCommands();
        GetFood();
    }
    private void GetFood()
    {
        FoodList = new List<FoodItem>()
        {
            new FoodItem() {Name="Applepie"}, 
            new FoodItem() {Name="Scones"}
        };
    }
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 7

  • 首先,您需要将Lists 替换为s ObservableCollection,以便UI可以检测何时添加新项目.
  • SelectedItem向ViewModel 添加属性:

    private FoodItem _selectedItem;
    public FoodItem SelectedItem
    {
        get { return _selectedItem;}
        set
        {
            _selectedItem = value;
            OnPropertyChanged("SelectedItem");
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • SelectedItem1st 的属性绑定ListBox到此属性:

    <ListBox Width=" 100" x:Name="Firstbox"
             ItemsSource="{Binding FoodList}"
             DisplayMemberPath="Name"
             SelectedItem="{Binding SelectedItem}" />
    
    Run Code Online (Sandbox Code Playgroud)
  • 将您的第二个绑定ListBoxNewFoodList酒店

  • 在ViewModel中创建一个命令:

    private DelegateCommand _addItemCommand;
    public ICommand AddItemCommand
    {
        get
        {
            if (_addItemCommand == null)
            {
                _addItemCommand = new DelegateCommand(AddItem);
            }
            return _addItemCommand;
        }
    }
    
    void AddItem()
    {
        if (SelectedItem != null)
            NewFoodList.Add(SelectedItem);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 最后,将按钮的Command属性绑定到AddItemCommand属性:

    <Button Margin="10" Command="{Binding AddItemCommand}" >Select</Button>
    
    Run Code Online (Sandbox Code Playgroud)