Я пытаюсь обновить свой элемент ListView. Все работает нормально, но мой список не будет обновляться при refre sh :( Я надеюсь, что somybody может мне помочь
XAML:
<ListView Name="BelegDaten" HorizontalAlignment="Left" Height="223" VerticalAlignment="Top" Width="772" Margin="10,217,0,0">
<ListView.View>
<GridView>
<GridViewColumn Width="250" DisplayMemberBinding="{Binding artikelname}">
<GridViewColumnHeader Tag="artikelname" Content="Artikelname" Click="ausgabenColumnHeader1_Click"></GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn Width="110" DisplayMemberBinding="{Binding artikelnr}">
<GridViewColumnHeader Tag="artikelnr" Content="Artikelnr" Click="ausgabenColumnHeader1_Click"></GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn Width="80" DisplayMemberBinding="{Binding anzahl}">
<GridViewColumnHeader Tag="anzahl" Content="Anzahl" Click="ausgabenColumnHeader1_Click"></GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn Width="100" DisplayMemberBinding="{Binding lagerplatz}">
<GridViewColumnHeader Tag="lagerplatz" Content="Lagerplatz" Click="ausgabenColumnHeader1_Click"></GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn Width="110" DisplayMemberBinding="{Binding reservelagerplatz}">
<GridViewColumnHeader Tag="reservelagerplatz" Content="Reservelagerplatz" Click="ausgabenColumnHeader1_Click"></GridViewColumnHeader>
</GridViewColumn>
<GridViewColumn Width="90" DisplayMemberBinding="{Binding erfasst}">
<GridViewColumnHeader Tag="erfasst" Content="Gescannt" Click="ausgabenColumnHeader1_Click"></GridViewColumnHeader>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
DisplayMemberBinding = "{Binding erfasst} работает нормально, я получить все данные в GUI. Click = "ausgabenColumnHeader1_Click" - мой класс для сортировки вкладки по c или des c
Вот мой код для генерации в первый раз c#
this.ITEMS = new ObservableCollection<ListViewItem>();
foreach (var obj in belegEinzelData.data.items)
{
ListViewItem item = new ListViewItem();
if (obj.scancount <= 0)
{
item.Background = Brushes.Red;
}
else if (obj.scancount == obj.anzahl)
{
item.Background = Brushes.Green;
}
else if (obj.scancount > 0)
{
item.Background = Brushes.Yellow;
}
item.Content = new PostenView
{
artikelname = obj.name,
artikelnr = obj.artikelnr,
ean = obj.barcode,
anzahl = obj.anzahl,
lagerplatz = obj.lagerplatz,
reservelagerplatz = obj.reservelagerplatz,
erfasst = obj.scancount
};
ITEMS.Add(item);
BelegDaten.ItemsSource = ITEMS;
}
Этот код, кажется, все в порядке и заполнить GUI без refre sh из-за ObservableCollection
Класс PostenView
public class PostenView
{
public string artikelname { get; set; }
public string artikelnr { get; set; }
public string ean { get; set; }
public int anzahl { get; set; }
public string lagerplatz { get; set; }
public string reservelagerplatz { get; set; }
public int erfasst { get; set; }
}
и это проверить данные и обновить их, но не обновляет:
private void SkuScan()
{
string SKU = textbox_sku.Text;
Items itemData = this.getDataByUserInput(SKU);
if (itemData != null)
{
if (this.ScanSessionData.ContainsKey(SKU) == false)
{
this.ScanSessionData[SKU] = 1;
foreach (var obj in this.ITEMS)
{
var listenItem = (obj.Content as PostenView);
if (listenItem.ean == SKU || listenItem.artikelnr == SKU)
{
listenItem.erfasst++;
}
}
}
else
{
if (this.ScanSessionData[SKU] < itemData.anzahl)
{
this.ScanSessionData[SKU]++;
foreach (var obj in this.ITEMS)
{
var listenItem = (obj.Content as PostenView);
if (listenItem.ean == SKU || listenItem.artikelnr == SKU)
{
listenItem.erfasst++;
}
}
}
else
{
MessageBox.Show("Zu viele Artikel. \n Bitte im Büro Abgeben", "Überlieferung", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
BelegDaten.Items.Refresh();
}
}
```
the MessageBox is displaying when its finshed and all, even the listenItem.erfasst works I got all data but my ListView is not changing at all we tested some code already but find no solution for our problem or the links doesn't work anymore :(
Edit class PostenView implement INotifyPropertyChanged
```
public class PostenView : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string artikelname { get; set; }
public string artikelnr { get; set; }
public string ean { get; set; }
public int anzahl { get; set; }
public string lagerplatz { get; set; }
public string reservelagerplatz { get; set; }
private int _erfasst;
public int erfasst {
get { return _erfasst; }
set {
_erfasst = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(this._erfasst)));
}
}
}
```