2016-07-11 16 views
0

Ich entwickle CRUD App für WindowsPhone 8.1. Ich kann der ObservableCollection-Auflistung Daten hinzufügen, und diese Daten werden in ListBox angezeigt. Ich benutze MVVM Muster.ListBoxItem aus ViewModel entfernen

Voll Repository https://github.com/OlegZarevych/CRUD_WP81

Ausblick:

<ListBox x:Name="Storage" ItemsSource="{Binding Path=Models, Mode=TwoWay}" > 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <Grid Height="30" Width="450"> 
          <TextBlock x:Name="nameblock" Text="{Binding Name}" /> 
         </Grid> 
         </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

Und Ansichtsmodell Klasse

public class ViewModel 
    { 
     public string NewName { get; set; } 
     public string NewSurname { get; set; } 
     public int NewAge { get; set; } 
     public int i=0 ; 
     public ObservableCollection<DataStorageModel> Models { get; set; } 
     //Event Handlers 
     public ICommand CreateClickCommand { get; set; } 
     public ICommand UpdateClickCommand { get; set; } 
     public ICommand DeleteClickCommand { get; set; } 
     public ViewModel() 
     { 
      CreateClickCommand = new RelayCommand(arg => CreateClickMethod()); 
      UpdateClickCommand = new RelayCommand(arg => UpdateClickMethod()); 
      DeleteClickCommand = new RelayCommand(arg => DeleteClickMethod()); 

      Models = new ObservableCollection<DataStorageModel>()   {}; 
     } 
     private void CreateClickMethod() 
     { 
      Models.Add(new DataStorageModel() { Name = NewName, Surname = NewSurname, Age = NewAge, Count=i++ }); 

     } 
     private void UpdateClickMethod() 
     {} 
     private void DeleteClickMethod() 
     {} 

}

Ich möchte um Daten zu ändern und zu löschen. Wie ich gut verstehe, muss ich die Anzahl aus ListBoxItems auswählen und diese Anzahl in ObservableCollection löschen (aktualisieren). Wie kann ich mit XAML-Code aus der ViewModel-Klasse arbeiten? Wie kann ich Storage in ViewModel initialisieren?

Oder in MVVM ist der bessere Weg, um dieses Problem zu lösen?

Antwort

0

Wenn Sie ein Modell aus dem ListBox löschen möchten, benötigen Sie normalerweise eine Möglichkeit, die ausgewählten ListBoxItems (oder Modelle) zu identifizieren, die Sie löschen möchten. Denken Sie daran, eine IsSelected Eigenschaft auf Ihren Modellen zu haben und binden Sie sie an eine CheckBox innerhalb der ListBoxItem Datenvorlage.

Jetzt, wenn Sie auf Löschen klicken, kann der Löschbefehl dann leicht in die Models Liste schauen und sehen, welche Elemente zum Löschen ausgewählt sind. Nachdem die Elemente gelöscht wurden, kann sie die Auflistung aufzählen und den Zählwert für die verbleibenden Elemente neu berechnen und das Feld im Ansichtsmodell aktualisieren.

Sie müssen also nicht auf XAML zugreifen, um die Anzahl der Modelle zu aktualisieren. Wenn Sie die count-Eigenschaft veränderbar machen, müssen Sie den Speicher nicht neu initialisieren, nachdem Sie Elemente aus der Liste gelöscht haben.

0

Ich habe Code t Modell

private bool _isSelected; 
    public bool IsSelected 
    { 
     get { return _isSelected; } 
     set 
     { 
      if (_isSelected != value) 
      { 
       _isSelected = value; 
       OnPropertyChanged("IsSelected"); 
      } 
     } 
    } 
    public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

Auch mit Bindin hinzugefügt Kontrollkästchen anzeigen.

 <ListBox x:Name="Storage" Background="Gray" FontSize="14" ItemsSource="{Binding Path=Models, Mode=TwoWay}" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid Height="60" Width="400" > 
         <CheckBox x:Name="checkbox" IsChecked="{Binding Path=IsSelected, UpdateSourceTrigger=PropertyChanged}" /> 
         <TextBlock x:Name="nameblock" Text="{Binding Name}"/> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Aber IsSelected var nicht ändert, wenn ich Checkbox in Artikel Warum?

Verwandte Themen