我有一个按钮。我希望它成为列表框中最喜欢的切换按钮。请参阅以下代码:
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可能存在一些问题。它需要在按下按钮后更改其内容。但我不确定。
答案 0 :(得分:3)
这是每个人都犯的常见错误,ObservableCollection<T>
实际上是通知绑定器集合中的更改而不是集合中的对象。
您的IsFavorite
课程中有Esx
个属性,按钮需要了解有关更改的内容,但为此,Esx
需要实施INotifyPropertyChanged
请参阅this,如果您需要更多帮助,请发布Esx类代码,也许我们可以提供帮助。
答案 1 :(得分:1)
正如Emaud所说,您必须在INotifyPropertyChanged
课程中实施Esx
界面。您还必须在绑定中设置Mode
到OneWay
,因为对于x:Bind
,默认模式为OneTime
,因此它不会收听任何更改。
Text="{x:Bind IsFavorite, Mode=OneWay, Converter={StaticResource favoriteConverter}}"