2017-02-22 5 views
0

Ich habe eine Liste von Objekten in einer Listenansicht angezeigt und ich möchte den Wert eines der Objekte aktualisieren, wenn ein anderes Kontrollkästchen aktiviert ist. Ich möchte dann, dass das Textfeld, das diesen Wert anzeigt, mit diesem neuen Wert aktualisiert wird. Momentan konnte ich das Objekt, das den anderen Wert enthält, holen und inkrementieren, aber den neuen Wert nicht anzeigen.MVVM: Binding-Werte werden nicht innerhalb einer Listview aktualisiert

<ListView Margin="0,5,5,5" Name="TruckModels" DockPanel.Dock="Top" Height="400" Width="1310" ItemsSource="{Binding ListOfTrucks}" HorizontalAlignment="Right"> 
     <ListView.View> 
      <GridView> 
       <!--New Version column--> 
       <GridViewColumn Header="New Version" Width="105"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Vertical"> 
           <TextBox AcceptsReturn="True" Height="Auto" Width="80" IsReadOnly="False" 
            x:Name="CurrentVersionTB" TextAlignment="Left" TextWrapping="Wrap" 
            VerticalScrollBarVisibility="Auto" 
            Text="{Binding NewVersionVal}" 
            Foreground="#FFCD0000" 
            DataContextChanged="CurrentVersionTB_DataContextChanged"/> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <!--Auto-Increment Version? column--> 
       <GridViewColumn Header="Auto-Increment&#10; Version?" Width="105"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <StackPanel Orientation="Vertical"> 
            <CheckBox IsChecked="{Binding IsSelectedAINV}" Checked="AutoIncrement_Checked" /> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       </GridView> 
     </ListView.View> 
    </ListView> 

CS Code:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     //List<Truckinfo> items = new List<Truckinfo>(); 
     ObservableCollection<Truckinfo> items = new ObservableCollection<Truckinfo>(); 

     xmlparsing(items); 
     TruckModels.ItemsSource = items; 
    } 
    private void ScrollViewer_MouseWheel(object sender, MouseWheelEventArgs e) 
    { 
     ScrollViewer scrollviewer = sender as ScrollViewer; 
     if (e.Delta > 0) 
     { 
      scrollviewer.LineUp(); 
     } 
     else 
     { 
      scrollviewer.LineDown(); 
     } 
     e.Handled = true; 
    } 
    private void AutoIncrement_Checked(object sender, RoutedEventArgs e) 
    { 
     Truckinfo item = (Truckinfo)(sender as CheckBox).DataContext; 
     int i; 
     int.TryParse(item.NewVersionVal, out i); 
     i++; 
     item.NewVersionVal = i.ToString(); 
     Debug.WriteLine(item.NewVersionVal); 
     e.Handled = true; 
    } 

    private void CurrentVersionTB_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) 
    { 
     TextBox t = sender as TextBox; 
     t.BindingGroup.UpdateSources(); 

    } 
} 

Ich habe versucht, INCP Schnittstelle zu verwenden, aber es will nicht mit den Objekten, die Tabelle füllen.

+0

Bitte schicken Sie Ihre 'Truckinfo' Klasse. Vielleicht muss "INotifyPropertyChanged" implementiert werden. –

+0

'Truckinfo' implementiert' INotifyPropertyChanged' nicht, ist das was du sagst? * "Es möchte die Tabelle nicht mit den Objekten bevölkern" * könnte so gut wie alles bedeuten, da ich keine Ahnung haben kann, auf was "es", "der Tisch" oder "die Objekte" sich bezieht. Können Sie beschreiben, was das eigentliche Problem war? Sie würden erstaunt sein, wie viele Dinge in dieser Welt mit dem Wort "es" beschrieben werden können. Im Grunde alle von ihnen. Es ist also schwer einzugrenzen. Ich meine, da draußen gibt es eine Menge Dinge, nur sichtbar von meinem Schreibtisch aus. –

Antwort

0

Die ObservableCollection wird nur aktualisiert, wenn sich die Sammlung ändert, nicht wenn ein Element geändert wird.

Sie müssen TruckInfo implementieren INotifyPropertyChanged für die einzelnen Artikeländerungen, um die Ansicht automatisch zu aktualisieren.

Alternativ können Sie das Objekt aus der Sammlung entfernen und das Objekt dann erneut einfügen. Dann lösen Sie das Ereignis Sammlungsänderung aus, und die Ansicht wird aktualisiert, damit sie dem aktuellen Sammlungsinhalt entspricht.

+0

Danke Ich werde INotifyPropertyChanged implementieren. Ich habe es schon einmal versucht, aber es hat meine Liste nicht mit meiner Liste von LKW-Objekten gefüllt. – Kennya42

+0

Es ist eine versteckte Frage. Sowohl der Artikel als auch die Sammlung müssen Observation/INotifyPropertyChanged sein, damit die Ansicht vollständig reagiert. –

Verwandte Themen