UWP 使用绑定布尔值 属性 在 XAML 的列表视图中更改文本

UWP Change text inside a listview in XAML using binded boolean property

我有一个带有网格和内部元素的列表视图。一个是文本块,如果 binded 属性 为真,我想显示一个 Segoe MDL2 图标,如果为假,则显示另一个图标(名为 MListEntryControl)。我读过的所有示例都是针对 UWP 之前的,或者不太了解 visualstatetriggers 如何用于满足这种特定需求。谢谢。

<ListView x:Name="MovementsList" Grid.Row="3" Grid.ColumnSpan="3" Margin="0,12,0,0" IsItemClickEnabled="False" SelectionMode="None" MinHeight="40">
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <Grid VerticalAlignment="Center">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*"></ColumnDefinition>
                                            <ColumnDefinition Width="*"></ColumnDefinition>
                                            <ColumnDefinition Width="*"></ColumnDefinition>
                                            <ColumnDefinition Width="*"></ColumnDefinition>
                                            <ColumnDefinition Width="auto"></ColumnDefinition>
                                        </Grid.ColumnDefinitions>
                                        <TextBlock Name="MListProvider" Text="{Binding Company.Name}" HorizontalAlignment="Stretch" Margin="0,0,12,0" ></TextBlock>
                                        <TextBlock Name="MListProduct" Text="{Binding Product.Name}" HorizontalAlignment="Stretch" Margin="0,0,12,0" Grid.Column="1"></TextBlock>
                                        <TextBlock Name="MListTemp" Text="{Binding Temperature}" HorizontalAlignment="Stretch" Margin="0,0,12,0" Grid.Column="2"></TextBlock>
                                        <TextBlock x:Name="MListEntryControl" Grid.Column="3"  FontFamily="Segoe MDL2 Assets" FontSize="22" Text=""></TextBlock>
                                        <Button Click="DeleteMovement_Click" Tag="{Binding MovementId}" Grid.Column="4" HorizontalAlignment="Center">
                                            <TextBlock Text="&#xE107;" FontFamily="Segoe MDL2 Assets" FontSize="22"></TextBlock>
                                        </Button>
                                    </Grid>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                            <ListView.ItemContainerStyle>
                                <Style TargetType="ListViewItem">
                                    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                                    <Setter Property="Background" Value="#E0E4CC"/>
                                </Style>
                            </ListView.ItemContainerStyle>
                        </ListView>

UWP Change text inside a listview in XAML using binded boolean property

对于您的场景,我认为 XamlBehaviors package is suite for you and may be easier. When the binding data updated can trigger a ChangePropertyAction. You can reference the DataTrigger sample hereDataTrigger

例如布尔值属性命名为"trueorfalse",代码示例如下:

<TextBlock
   x:Name="MListEntryControl"
   Grid.Column="3"                           
   FontSize="22"                        
   Text="&#xE107;">        
   <Interactivity:Interaction.Behaviors>
                            <Interactions:DataTriggerBehavior
                                Binding="{Binding trueorfalse}"
                               Value="true"  ComparisonCondition="Equal">
                                <Interactions:ChangePropertyAction
                                    PropertyName="FontFamily"
                                    TargetObject="{Binding ElementName=MListEntryControl}"
                                    Value="Segoe MDL2 Assets" />
                            </Interactions:DataTriggerBehavior>
                            <Interactions:DataTriggerBehavior
                                Binding="{Binding trueorfalse}"
                               Value="false"  ComparisonCondition="Equal">
                                <Interactions:ChangePropertyAction
                                    PropertyName="FontFamily"
                                    TargetObject="{Binding ElementName=MListEntryControl}"
                                    Value="Yu Gothic UI" />
                            </Interactions:DataTriggerBehavior>
                        </Interactivity:Interaction.Behaviors> 
</TextBlock>