none
Einträge in ObservableCollection erscheinen mehrfach, bzw. werden mehrfach hinzugefügt RRS feed

  • Frage

  • Hallo,

    Ich habe hier ein sehr merkwürdiges Verhalten beim Einfügen von Einträgen in eine ObervableCollection. Jedesmal wenn ich einen Eintrag vornehme erscheint dieser Doppelt und mehrfach. Also 1. Eintrag -> 1 Eintrag, 2. Eintrag -> 2x 2. Eintrag, 3. Eintrag -> 3x 3. EIntrag usw. Letztendlich erscheint der Eintrag so oft wie ich Einträge vorher gemacht habe +1. Komme der Ursache selbst mit Haltepunkten nicht auf die Spur.

    Model:

    using System.ComponentModel;
    using System.Runtime.CompilerServices;
    
    namespace MyDEFCON_UWP.Models
    {
        public class CheckListItem : INotifyPropertyChanged
        {
            #region Fields
            string _item = default(string);
            bool _checked = default(bool);
            #endregion
    
            #region Properties
            public string Item { get { return _item; } set { Set(ref _item, value);  } }
            public bool Checked { get { return _checked; } set { Set(ref _checked, value); } }
            #endregion
    
            #region NotifyPropertyChanged
            public event PropertyChangedEventHandler PropertyChanged;
    
            public void RaisePropertyChanged([CallerMemberName]string propertyName = null)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
    
            public bool Set<T>(ref T storage, T value, [CallerMemberName]string propertyName = null)
            {
                if (Equals(storage, value))
                    return false;
                storage = value;
                RaisePropertyChanged(propertyName);
                return true;
            }
            #endregion
        }
    }

    Ausschnitte aus dem ViewModel:

    ObservableCollection<CheckListItem> _checkList;
    public ObservableCollection<CheckListItem> CheckList { get { return _checkList; } set { Set(ref _defcon1CheckList, value); } }
    
    private DelegateCommand<string> _addItemCommand;
            public DelegateCommand<string> AddItemCommand
            {
                get
                {
                    if (_addItemCommand != null)
                        return _addItemCommand;
                    _addItemCommand = new DelegateCommand<string>
                        (
                            (s) => 
                            {
                                CheckList.Add(new CheckListItem() { Item = s, Checked = false });
                                                                }
                        );
                    return _addItemCommand;
                }
            }

    XAML Ausschnitt:

    <AppBarButton.Flyout>
                        <Flyout FlyoutPresenterStyle="{StaticResource AddItemFlyoutPresenterStyle}">
                            <Interactivity:Interaction.Behaviors>
                                <dependencies:FlyoutBehavior>
                                    <dependencies:FlyoutBehavior.OpenActions>
                                        <Core:InvokeCommandAction Command="{Binding AddItemFlyoutOpenCommand, Mode=OneWay}"/>
                                    </dependencies:FlyoutBehavior.OpenActions>
                                    <dependencies:FlyoutBehavior.CloseActions>
                                        <Core:InvokeCommandAction Command="{Binding AddItemFlyoutCloseCommand, Mode=OneWay}"/>
                                    </dependencies:FlyoutBehavior.CloseActions>
                                </dependencies:FlyoutBehavior>
                            </Interactivity:Interaction.Behaviors>
                            <Grid Width="{Binding ScreenWidth}" Padding="0,0,24,0">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="1*"/>
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <TextBox x:Name="textBox" Grid.Column="0" FontSize="24" Margin="0" VerticalAlignment="Center"/>
                                <AppBarButton Grid.Column="1" Label="Accept" Icon="Accept" HorizontalAlignment="Center" VerticalAlignment="Center">
                                    <Interactivity:Interaction.Behaviors>
                                        <Core:EventTriggerBehavior EventName="Click">
                                            <Core:InvokeCommandAction Command="{Binding AddItemCommand, Mode=OneWay}" CommandParameter="{Binding Text, ElementName=textBox}"/>
                                            <Behaviors:CloseFlyoutAction/>
                                        </Core:EventTriggerBehavior>
                                    </Interactivity:Interaction.Behaviors>
                                </AppBarButton>
                            </Grid>
                        </Flyout>
                    </AppBarButton.Flyout>

    Weis jemand was da schieflaufen könnte?


    Montag, 15. Februar 2016 22:45

Antworten

  • Fehler gefunden,

    Kommando über InvokeCommandAction gestrichen und stattdessen das Kommando direkt über den AppBarButton gebunden.

    • Als Antwort markiert Marcus Runge Montag, 15. Februar 2016 22:56
    Montag, 15. Februar 2016 22:56