按钮内容不会实时更改

时间:2016-11-03 19:47:35

标签: c# uwp

我有一个按钮。我希望它成为列表框中最喜欢的切换按钮。请参阅以下代码:

onError

我的问题是,当我点击此按钮时,它不会实时改变其中的图标(从emtpy星到全星,反之亦然)。

如果再次加载列表框,则会显示正确的图标。

背后的代码是:

<Page
    x:Class="W.Pages.ExPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Workout_EF.Pages"
    xmlns:converter="using:W.Converters"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:data="using:W.Model"
    mc:Ignorable="d">
    <Page.Resources>
        <converter:FavoriteValueConverter x:Key="favoriteConverter" />
    </Page.Resources>

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <ListBox Name="MyListbox"
            SelectionMode="Single"                           
            ItemsSource="{x:Bind exs}"
            SelectionChanged="MyListbox_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate x:DataType="data:Ex">
                    <StackPanel Orientation="Horizontal">
                        <Button Name="IsFavoriteToggle" Click="IsFavoriteToggle_Click">
                            <Button.Content>
                                <TextBlock
                                    x:Name="isFavoriteTextBlock" 
                                    Text="{x:Bind IsFavorite, Converter={StaticResource favoriteConverter}}"
                                    FontFamily="Segoe MDL2 Assets"/>
                            </Button.Content>
                        </Button>
                        <TextBlock 
                            VerticalAlignment="Center" 
                            FontSize="16" 
                            Text="{Binding ExName}"
                            Margin="20,0,0,0" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Page>

我注意到itemsource可能存在一些问题。它需要在按下按钮后更改其内容。但我不确定。

2 个答案:

答案 0 :(得分:3)

这是每个人都犯的常见错误,ObservableCollection<T>实际上是通知绑定器集合中的更改而不是集合中的对象。 您的IsFavorite课程中有Esx个属性,按钮需要了解有关更改的内容,但为此,Esx需要实施INotifyPropertyChanged

请参阅this,如果您需要更多帮助,请发布Esx类代码,也许我们可以提供帮助。

答案 1 :(得分:1)

正如Emaud所说,您必须在INotifyPropertyChanged课程中实施Esx界面。您还必须在绑定中设置ModeOneWay,因为对于x:Bind,默认模式为OneTime,因此它不会收听任何更改。

Text="{x:Bind IsFavorite, Mode=OneWay, Converter={StaticResource favoriteConverter}}"