C# Обновление WPF ListView при изменении переменной - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь обновить свой элемент 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)));
                }
            }
        }
```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...