【问题标题】:Xamarin Forms flyoutitem icon binding not updating after initialXamarin Forms flyoutitem 图标绑定在初始后未更新
【发布时间】:2021-11-16 16:09:54
【问题描述】:

我正在尝试将我的图标绑定到我的 appshell 视图模型中的一个属性。这是第一次工作,我正在观看“flyoutispresented”属性更改以更新图标 - 我正在两个不同的 png 之间切换。该事件每次都会触发,我可以看到视图模型中的属性正在更新,但弹出图像没有改变。它似乎保持第一次渲染时的样子。在我的 appshell 构造函数中,我正在执行以下操作:

model = new AppShellViewModel(); this.BindingContext = 模型;

        this.PropertyChanged +=
        (obj, args) => model.Shell_PropertyChanged(obj, args);

所以我正在使用视图模型的单个实例,并且该方法被正确调用。有没有人幸运地显示了这样的不同图标?我错过了什么,即使我更改了图标属性,但它没有显示更改?

【问题讨论】:

    标签: c# xamarin.forms app-shell


    【解决方案1】:

    我们可以通过 VisualStateManager status selected 和 normal 来修改图标源。

    <Shell.ItemTemplate>
        <DataTemplate >
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="0.2*" />
                    <ColumnDefinition Width="0.8*" />
                </Grid.ColumnDefinitions>
                <VisualStateManager.VisualStateGroups>
                    <VisualStateGroupList>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal">
                                <VisualState.Setters>
                                    <Setter TargetName="FlyoutItemIcon" Property="Image.Source" Value="icon_about.png"></Setter>
                                </VisualState.Setters>
                            </VisualState>
                            <VisualState x:Name="Selected">
                                <VisualState.Setters>
                                    <Setter TargetName="FlyoutItemIcon" Property="Image.Source" Value="cactus_24px.png"></Setter>
                                </VisualState.Setters>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateGroupList>
                </VisualStateManager.VisualStateGroups>
                <Image x:Name="FlyoutItemIcon" Source="{Binding FlyoutIcon}"
                       Margin="5"
                       HeightRequest="45" >
                </Image>
                <Label  Grid.Column="1"
                       Text="{Binding Title}"
                       FontAttributes="Italic"
                       VerticalTextAlignment="Center" />
            </Grid>
        </DataTemplate>
    </Shell.ItemTemplate>
    

    更新:

     <FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
        <ShellContent  Title="About" Icon="icon_about.png"  Route="AboutPage" ContentTemplate="{DataTemplate local:AboutPage}" />
        
    </FlyoutItem>
     
    

    【讨论】:

    • 我需要为一个特定的菜单项动态更改图标,这将指示列表中是否有未读项目。不确定 VisualState 是否会有所帮助?我正在按如下方式操作图标: 问题是它在初始创建后没有更新,尽管我成功更改了图标值。
    • 检查更新。该代码适用于模板。
    • 谢谢。我如何将它用于除了 Selected 之外的其他东西,这似乎是默认状态?如果我创建自己的自定义状态,我将如何更改代码隐藏中的状态?
    • 另外,您正在将图像绑定到“FlyoutIcon”,但我在其他任何地方都没有看到
    • 您可以将 Normal VisualState 中的属性设置为默认状态。 FlyoutIcon 是 Shell FlyoutItem 模板中的图标属性名称。它与我在更新的 ShellContent 中设置的Icon 匹配。
    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2020-07-22
    相关资源
    最近更新 更多