2011-11-13 12 views
6

Sono nuovo di MVVM e anche abbastanza nuovo per WPF. In effetti ho iniziato a programmare solo pochi mesi fa. MVVM mi sta davvero a cuore con il concetto di rilegatura e da giorni cerco semplicemente di creare un'applicazione che ti permetta di selezionare un oggetto da un listbx, e quando clicchi sul pulsante aggiungi l'oggetto selezionato dovrebbe essere salvato in una nuova lista. La seconda casella di riepilogo visualizza gli ultimi elementi aggiunti ed è possibile selezionare un elemento ed eliminarlo utilizzando un altro pulsante. ususivamente vorrei andare per l'evento click e decorare il mio codice con metodi piuttosto piccoli, ma voglio davvero imparare come fare tutto questo usando i bind e senza codebehind. sarei estremamente felice per qualsiasi aiuto, e si ricorda che io sono nuovo a questo e ho molta voglia di tenerlo il più semplice possibile :) Cordiali saluti DanielaCome posso aggiungere elementi da una listbox a un elenco facendo clic su un pulsante senza codebehind?

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

Lista privato _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"} 
     }; 
    } 
+0

pubblicare il tuo codice attuale –

+1

Non avere così tanto codice :(Avere non ho idea di come fare questo :( –

+0

se posso suggerire che potresti leggere un libro su MVVM e quindi sarai in grado di farlo facilmente. Ma per aiutarti in questo momento, devi implementare ICommand e quindi associarli alla proprietà dei comandi dei pulsanti. È molto facile da fare e puoi trovare molti esempi per aiutarti. – BigL

risposta

7
  • prima, è necessario sostituire i List s con ObservableCollection s, in modo che l'interfaccia utente in grado di rilevare quando vengono aggiunti nuovi elementi.
  • Aggiungere una proprietà SelectedItem al vostro ViewModel:

    private FoodItem _selectedItem; 
    public FoodItem SelectedItem 
    { 
        get { return _selectedItem;} 
        set 
        { 
         _selectedItem = value; 
         OnPropertyChanged("SelectedItem"); 
        } 
    } 
    
  • legano la SelectedItem proprietà del 1 ° ListBox a questa proprietà:

    <ListBox Width=" 100" x:Name="Firstbox" 
         ItemsSource="{Binding FoodList}" 
         DisplayMemberPath="Name" 
         SelectedItem="{Binding SelectedItem}" /> 
    
  • vincolare il proprio 2 ° ListBox al NewFoodList proprietà

  • creare un comm e nel tuo 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); 
    } 
    
  • E, infine, legare di proprietà del pulsante Command alla proprietà AddItemCommand:

    <Button Margin="10" Command="{Binding AddItemCommand}" >Select</Button> 
    
+0

Grazie mille per il vostro aiuto! Ottengo: "Riferimento oggetto non impostato su un'istanza di un oggetto" nel metodo AddItem, hai qualche idae perché? –

+1

Quando eseguo il debug, posso vedere che un elemento è selezionato, ma non viene aggiunto a NewFoodList. –

+0

@Daniela, è necessario inizializzare la proprietà NewFoodList nel costruttore: 'NewFoodList = new ObservableCollection ();' –

Problemi correlati