Xamarin добавление и удаление контента - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть кнопка, которая удаляет и добавляет вещи. Если я нажму его один раз, это изменит вещи, и это будет работать нормально, но если я нажму это снова и хочу, чтобы мои метки вернулись в прежнее состояние, прежде чем я получу исключение.

вот мой xaml

 <ContentPage.ToolbarItems>
        <ToolbarItem x:Name="btnChangePositions"  Priority="0" Clicked="ExchangeEnglishAndCzechVersion"/>
        <ToolbarItem Clicked="DictionaryInfo_Clicked">
            <ToolbarItem.IconImageSource >
                <FontImageSource Glyph="{ x:Static local:GrialIconsFont.HelpCircle}"
                                Size="20"
                                FontFamily="{StaticResource GrialIconsFill}"/>
            </ToolbarItem.IconImageSource>
        </ToolbarItem>
        <ToolbarItem Clicked="Listening_Clicked">
            <ToolbarItem.IconImageSource >
                <FontImageSource Glyph="{ x:Static local:GrialIconsFont.Headphones}"
                                Size="20"
                                FontFamily="{StaticResource GrialIconsFill}"
                                />
            </ToolbarItem.IconImageSource>
        </ToolbarItem>
        <ToolbarItem Clicked="Lock_Clicked">
            <ToolbarItem.IconImageSource  >
                <FontImageSource Glyph="{ x:Static local:MaterialCommunityIconsFont.Lock}"
                                 x:Name="lockScreenWithFrame"
                                FontFamily="{StaticResource MaterialCommunityIcons}" 
                                Size="20"/>
            </ToolbarItem.IconImageSource>
        </ToolbarItem>
    </ContentPage.ToolbarItems>
    <Grid HorizontalOptions="Fill" VerticalOptions="FillAndExpand" Padding="0" x:Name="mainGrid">
        <Grid BackgroundColor="{ DynamicResource MainWrapperBackgroundColor }"
                   RowSpacing="0">
            <Grid.RowDefinitions>
                <RowDefinition
                        Height="27*" />
                <RowDefinition
                        Height="27*" />
                <RowDefinition
                        Height="12*" />
                <RowDefinition
                        Height="Auto" />

                <!--<RowDefinition
                        Height="7*" />-->
            </Grid.RowDefinitions>
            <Grid Grid.Row="0" Padding="5" x:Name="defaultEnglishGrid" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                <Grid ><!--Margin="5"-->
                    <!-- CARD ONE -->
                    <grial:CardView x:Name="CardViewNameENg"
                        Style="{ StaticResource ResponsiveLandscapeMarginStyle }"
                                VerticalOptions="FillAndExpand"
                                CornerRadius="10" 
                            Padding="5">
                        <!-- Text -->
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition
                                                Width="*" />
                                    <ColumnDefinition
                                                Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="150" />
                                </Grid.RowDefinitions>
                                <Grid Grid.Column="0" HeightRequest="150" Grid.Row="0">
                                    <ScrollView>
                                    <controls:ExtendedWebView x:Name="nameEng" Opacity="1"  IsVisible="True" HeightRequest="150"/>
                                    </ScrollView>
                                </Grid>
                                <!-- Column button Play-->
                                <Grid Padding ="5,0,0,0"
                                            Grid.Row="0"
                                            Grid.Column="1">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="0.5*"></RowDefinition>
                                        <RowDefinition Height="0.5*"></RowDefinition>
                                    </Grid.RowDefinitions>
                                    <Label   x:Name="buttonPlay" 
                                             VerticalTextAlignment="Start"
                                             HorizontalTextAlignment="End"
                                             Text="{ x:Static local:GrialIconsFont.Volume2 }"
                                             FontFamily="{ StaticResource IconsFontFamily }"
                                             TextColor="{ DynamicResource AccentColor }">
                                        <Label.GestureRecognizers >
                                            <TapGestureRecognizer
                                               Tapped="StartOrStopPlaying">
                                            </TapGestureRecognizer>
                                        </Label.GestureRecognizers>
                                        <Label.FontSize>
                                            <OnIdiom
                                    x:TypeArguments="x:Double"
                                    Phone="25"
                                    Tablet="30" />
                                        </Label.FontSize>
                                    </Label>
                                    <Label   x:Name="buttonPause" 
                                             VerticalTextAlignment="Start"
                                             HorizontalTextAlignment="End"  IsVisible="False"
                                             Text="{ x:Static local:GrialIconsFont.AudioPause }"
                                             FontFamily="{ StaticResource IconsFontFamily }"
                                             TextColor="{ DynamicResource AccentColor }">
                                        <Label.GestureRecognizers >
                                            <TapGestureRecognizer
                                                Tapped="StartOrStopPlaying">
                                            </TapGestureRecognizer>
                                        </Label.GestureRecognizers>
                                        <Label.FontSize>
                                            <OnIdiom
                                                x:TypeArguments="x:Double"
                                                Phone="25"
                                                Tablet="30" />
                                        </Label.FontSize>
                                    </Label>
                                </Grid>
                                <!-- Column Button Plus -->
                                <Grid Padding ="5,0,0,0"
                                            Grid.Row="0"
                                            Grid.Column="1"
                                            VerticalOptions="End">
                                    <Label x:Name="btnMakeLargerName" 
                                           VerticalTextAlignment="End"
                                           HorizontalTextAlignment="End"
                                           Text="{ x:Static local:GrialIconsFont.ZoomIn }"
                                           FontFamily="{ StaticResource IconsFontFamily }"
                                           TextColor="{ DynamicResource AccentColor }">
                                        <Label.FontSize>
                                            <OnIdiom
                                    x:TypeArguments="x:Double"
                                    Phone="25"
                                    Tablet="30" />
                                        </Label.FontSize>
                                    </Label>

                                </Grid>

                            </Grid>
                    </grial:CardView>
                </Grid>
            </Grid>
            <Grid Grid.Row="1" Padding="5" x:Name="parentOfDefaultCzechGrid"  HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
                <Grid x:Name="defaultCzechGrid" >
                    <!--Margin="5"--> 
                    <!-- CARD TWO -->
                    <grial:CardView x:Name="CardViewCzech"
                                Style="{ StaticResource ResponsiveLandscapeMarginStyle }"
                                CornerRadius="10"   VerticalOptions="FillAndExpand"
                            Padding="0" >

                            <!-- Text -->
                            <Grid RowSpacing ="5">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="0.8*"></ColumnDefinition>
                                    <ColumnDefinition Width="0.2*"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                <RowDefinition Height="150" />
                                </Grid.RowDefinitions>
                                <ScrollView>
                                        <controls:ExtendedWebView x:Name="explanation"  VerticalOptions="Start"  HorizontalOptions="Start" Opacity="1" HeightRequest="150"/>
                                    </ScrollView>
                                <Grid Grid.Column="1">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="0.5*"></RowDefinition>
                                        <RowDefinition Height="0.5*"></RowDefinition>
                                        <RowDefinition Height="0.1*"></RowDefinition>
                                        <RowDefinition Height="0.5*"></RowDefinition>
                                    </Grid.RowDefinitions> 

                                <!-- Column button Eye-->

                                        <Label x:Name="btnVisual" 
                                                Grid.Row="0"
                                           VerticalTextAlignment="Start"
                                           HorizontalTextAlignment="End"
                                           Text="{ x:Static local:GrialIconsFont.Eye }"
                                           FontFamily="{ StaticResource IconsFontFamily }"
                                           TextColor="{ DynamicResource AccentColor }">
                                        <Label.GestureRecognizers >
                                            <TapGestureRecognizer
                                                Tapped="HideLabels">
                                            </TapGestureRecognizer>
                                        </Label.GestureRecognizers>
                                        <Label.FontSize>
                                            <OnIdiom
                                    x:TypeArguments="x:Double"
                                    Phone="25"
                                    Tablet="30" />
                                        </Label.FontSize>
                                    </Label>

                                <!-- Column Button Trash -->
                                    <Label x:Name="btnBin"    Grid.Row="1"
                                       VerticalTextAlignment="Center"
                                       HorizontalTextAlignment="End"
                                       Text="{ x:Static local:IoniconsFont.IosTrash }"
                                       FontFamily="{ StaticResource Ionicons }"
                                       TextColor="{ DynamicResource AccentColor }">
                                        <Label.GestureRecognizers >
                                            <TapGestureRecognizer
                                                Tapped="RemoveWordFromUserDictionary">
                                            </TapGestureRecognizer>
                                        </Label.GestureRecognizers>
                                        <Label.FontSize>
                                            <OnIdiom
                                    x:TypeArguments="x:Double"
                                    Phone="25"
                                    Tablet="30" />
                                        </Label.FontSize>
                                    </Label>



                                <!-- Column Button Plus -->

                                <Label    Grid.Row="3" x:Name="btnMakeLarger" 
                                                VerticalTextAlignment="End"
                                                HorizontalTextAlignment="End"
                                                Text="{ x:Static local:GrialIconsFont.ZoomIn }"
                                                FontFamily="{ StaticResource IconsFontFamily }"
                                                TextColor="{ DynamicResource AccentColor }">
                                        <Label.FontSize>
                                            <OnIdiom
                                    x:TypeArguments="x:Double"
                                    Phone="25"
                                    Tablet="30" />
                                        </Label.FontSize>
                                    </Label>



                            </Grid>
                                </Grid>
                    </grial:CardView>
                </Grid>
            </Grid>
            <!-- CARD Three -->
            <Grid Grid.Row="2" Padding="5,0,5,0"  RowSpacing="10" x:Name="gridButtons" >
                <Grid>
                    <grial:CardView
                                Style="{ StaticResource ResponsiveLandscapeMarginStyle }"

                                HeightRequest="100" HorizontalOptions="Fill"
                                CornerRadius="10"
                        Padding="0,0,0,3">
                        <Grid Padding="0"
                                    VerticalOptions="Start"
                                    HorizontalOptions="CenterAndExpand">
                            <Grid.RowDefinitions>
                            <RowDefinition
                                Height="Auto" />
                            <RowDefinition
                                Height="Auto" />
                            </Grid.RowDefinitions> 
                            <!-- BUTTONS GRID -->
                            <Grid Margin="0"
                                  ColumnSpacing="10"
                        HorizontalOptions="CenterAndExpand"
                            VerticalOptions="StartAndExpand">

                                <!-- Rating Button Grid -->
                                <Grid Grid.Row="0"    ColumnSpacing="15" Padding="0,2,0,0">
                                    <!-- One -->
                                    <Button x:Name="firstRateBtn"  Grid.Column="0" HorizontalOptions="Center" Text="1"  Style="{ StaticResource CircleActionButtonFlatStyle }" VerticalOptions="Start"  HeightRequest="50" CornerRadius="25" WidthRequest="50" Clicked="RateOneAndShowOtherword"/>
                                <!-- Two -->
                                    <Button x:Name="secondRateBtn"  Grid.Column="1" HorizontalOptions="Center" Text="2" Style="{ StaticResource CircleActionButtonFlatStyle }" VerticalOptions="Start" HeightRequest="50" CornerRadius="25" WidthRequest="50" Clicked="RateTwoAndShowOtherword" />
                                <!-- Three-->
                                    <Button  x:Name="thirdRateBtn"   Grid.Column="2" HorizontalOptions="Center" Text="3" Style="{ StaticResource CircleActionButtonFlatStyle }" VerticalOptions="Start" HeightRequest="50" CornerRadius="25" WidthRequest="50" Clicked="RateThreeAndShowOtherword"  />
                                <!-- Four -->
                                    <Button x:Name="fourthRateBtn"  Grid.Column="3" HorizontalOptions="Center" Text="4"  Style="{ StaticResource CircleActionButtonFlatStyle }" VerticalOptions="Start" HeightRequest="50" CornerRadius="25" WidthRequest="50" Clicked="RateFourAndShowOtherword"/>
                                <!-- Five -->
                                    <Button  x:Name="fifthRateBtn"  Grid.Column="4" HorizontalOptions="Center" Text="5"  Style="{ StaticResource CircleActionButtonFlatStyle }" VerticalOptions="Start" HeightRequest="50" CornerRadius="25" WidthRequest="50" Clicked="RateFiveAndShowOtherword" />
                                </Grid>

                            </Grid>
                            <!-- Labels -->
                            <Grid Grid.Row="1" HorizontalOptions="FillAndExpand" VerticalOptions="EndAndExpand" Padding="0,2,0,0">
                                <!--Text Wrong-->
                                <Label Text="{ grial:Translate A_LabelCorrectWrong }" FontSize="14" Style="{ StaticResource LabelBoldStyle }" TextColor="{ DynamicResource CircleActionButtonFlatTextColor }" VerticalOptions="End" HorizontalOptions="Start"
                            IsVisible="{grial:OnOrientationBool
                                    Default='true',
                                    LandscapePhone='false'}" />

                            </Grid>
                        </Grid>
                    </grial:CardView>
                </Grid>

            </Grid>
            <!-- CARD Four -->
            <Grid Grid.Row="3" Padding="5,5,5,5" x:Name="gridDailyAmount">
                <Grid >
                    <grial:CardView
                                Style="{ StaticResource ResponsiveLandscapeMarginStyle }"

                                VerticalOptions="Fill"
                                CornerRadius="10"
                        Padding="0">
                        <Grid Margin="0"
                        ColumnSpacing="0"

                        Padding="{ grial:OnOrientationThickness Default='20', LandscapePhone='20,8'
                        }">

                            <Grid.RowDefinitions>
                                <RowDefinition
                                Height="*" />
                                <RowDefinition
                                Height="*" />

                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>

                            <!--Text Daily dose-->
                            <Label Grid.Row="0" Margin="0"  Grid.Column ="0" Text="Dnešní dávka" FontSize="15" TextColor="{ DynamicResource CircleActionButtonFlatTextColor }" VerticalOptions="Start" HorizontalOptions="Start"
                            IsVisible="{grial:OnOrientationBool
                                    Default='true',
                                    LandscapePhone='false'}" />
                            <Label Grid.Row="0" Margin="0"  Grid.Column ="1" x:Name="amountOfWordForToday" FontSize="15" TextColor="{ DynamicResource CircleActionButtonFlatTextColor }" VerticalOptions="Start" HorizontalOptions="End"
                            IsVisible="{grial:OnOrientationBool
                                    Default='true',
                                    LandscapePhone='false'}" />
                            <!--Text Amount of words-->
                            <Label Grid.Row="1" Grid.Column="0" Margin="0" Text="Slovíček ve slovníku" FontSize="15" TextColor="{ DynamicResource CircleActionButtonFlatTextColor }" VerticalOptions="End" HorizontalOptions="StartAndExpand"
                            IsVisible="{grial:OnOrientationBool
                                    Default='true',
                                    LandscapePhone='false'}" />
                            <Label Grid.Row="1" Margin="0" Grid.Column="1" x:Name="amountOfWordsInDictionary"  FontSize="15" TextColor="{ DynamicResource CircleActionButtonFlatTextColor }" VerticalOptions="End" HorizontalOptions="End"
                            IsVisible="{grial:OnOrientationBool
                                    Default='true',
                                    LandscapePhone='false'}" />                       
                        </Grid>
                    </grial:CardView>
                </Grid>
            </Grid>
        </Grid>        
    </Grid>
</ContentPage>

 private void ExchangeEnglishAndCzechVersion(object sender, EventArgs e)
        {

                CardViewCzech.Children.Remove(explanation);
                CardViewCzech.Children.Add(nameEng);
                CardViewNameENg.Children.Remove(nameEng);
                CardViewNameENg.Children.Add(explanation);
                CardViewCzech.Children.Add(btnVisual);
                CardViewCzech.Children.Add(btnMakeLarger);
                CardViewCzech.Children.Add(btnBin);
                CardViewNameENg.Children.Add(buttonPlay);
                CardViewNameENg.Children.Add(btnMakeLargerName);

                btnChangePositions.Text = "EN/CZ";

        }

Метка на кнопке меняется, и как только я нажимаю ее снова, мне нужно содержимое go назад, как прежде. Но я получаю исключение прямо во второй строке после попытки go вернуть System.InvalidOperationException: Cannot change ObservableCollection during a CollectionChanged event.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...