Как я могу добавить элементы из списка в список, нажав кнопку без какого-либо кода позади? - PullRequest
6 голосов
/ 14 ноября 2011

Я новичок в MVVM, а также довольно новичок в WPF.На самом деле я начал программировать всего несколько месяцев назад.MVVM действительно тесно связан с концепцией связывания, и я уже несколько дней пытаюсь просто создать приложение, которое позволяет вам выбирать элемент из списка, и когда вы нажимаете кнопку добавления, выбранный элемент должен бытьсохранено в новом списке.Во втором списке отображаются последние добавленные элементы, и вы можете выбрать элемент и удалить его с помощью другой кнопки.Обычно я хотел бы пойти на событие click и украсить свой код довольно маленькими методами, но я действительно хочу научиться делать все это, используя привязки, а не код.Я был бы очень рад за любую помощь, и, пожалуйста, помните, что я новичок в этом, и я действительно хочу сделать это как можно проще :) с уважением Даниэла

<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>

приватный список _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"}
        };
    }

1 Ответ

7 голосов
/ 14 ноября 2011
  • сначала необходимо заменить List s на ObservableCollection s, чтобы пользовательский интерфейс мог определять, когда добавляются новые элементы.
  • Добавить свойство SelectedItemдля вашей ViewModel:

    private FoodItem _selectedItem;
    public FoodItem SelectedItem
    {
        get { return _selectedItem;}
        set
        {
            _selectedItem = value;
            OnPropertyChanged("SelectedItem");
        }
    }
    
  • привязать свойство SelectedItem 1-го ListBox к этому свойству:

    <ListBox Width=" 100" x:Name="Firstbox"
             ItemsSource="{Binding FoodList}"
             DisplayMemberPath="Name"
             SelectedItem="{Binding SelectedItem}" />
    
  • свяжите вашу вторую ListBox со свойством NewFoodList

  • создайте команду в вашей 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);
    }
    
  • И, наконец, связывайтесвойство кнопки Command для свойства AddItemCommand:

    <Button Margin="10" Command="{Binding AddItemCommand}" >Select</Button>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...