Windows phone 7 基于recordid的windows phone 8 longlistselector显示和隐藏按钮
我的长列表选择器中显示了一个图书列表,如下所示Windows phone 7 基于recordid的windows phone 8 longlistselector显示和隐藏按钮,windows-phone-7,windows-phone-8,windows-phone,windows-phone-7.1,Windows Phone 7,Windows Phone 8,Windows Phone,Windows Phone 7.1,我的长列表选择器中显示了一个图书列表,如下所示 <DataTemplate x:Key="BooksItemTemplate"> <StackPanel Grid.Column="1" Grid.Row="0" VerticalAlignment="Top"> <TextBlock Name="booktitle" Text="{Binding BookTitle,Mode=OneWay
<DataTemplate x:Key="BooksItemTemplate">
<StackPanel Grid.Column="1" Grid.Row="0" VerticalAlignment="Top">
<TextBlock Name="booktitle" Text="{Binding BookTitle,Mode=OneWay}" Style="{StaticResource PhoneTextNormalStyle}" TextWrapping="Wrap" FontFamily="{StaticResource PhoneFontFamilySemiBold}"/>
<TextBlock Text="{Binding AuthorName,Mode=OneWay}" Style="{StaticResource PhoneTextNormalStyle}" TextWrapping="Wrap" FontFamily="{StaticResource PhoneFontFamilySemiLight}"/>
<Button Content="Add To Favourites" Tag="{Binding BookId,Mode=OneWay}" Click="Button_Click_1" ></Button>
</StackPanel>
</Grid>
</DataTemplate>
<phone:LongListSelector x:Name="bookslist" Grid.Row="1"
ListFooter="{Binding}"
ItemsSource="{Binding BooksList}"
Background="Transparent"
IsGroupingEnabled="False"
ListFooterTemplate ="{StaticResource booksListFooter}"
ItemTemplate="{StaticResource BooksItemTemplate}"/>
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Button bt = (Button)sender;
IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
List<long> ListFavourites;
if (settings.Contains("ListFavourites"))
{
ListFavourites = settings["ListFavourites"] as List<long>;
}
else
{
ListFavourites = new List<long>();
}
if(!ListFavourites.Contains(Convert.ToInt64(bt.Tag)))
{
ListFavourites.Add(Convert.ToInt64(bt.Tag));
}
settings["ListFavourites"] = ListFavourites;
settings.Save();
}
问题:
现在,当加载上面的图书列表(longlistselector)时,当页面加载时,我想根据IsolatedStorage设置中是否存在bookid来显示或隐藏添加到收藏夹按钮。我在这里尝试的是将转换器绑定到addtofavorite
按钮,并将convertparameter与bookid绑定。但是convertparameter不支持绑定
那么,基于isolatedstoragesetting中收藏夹列表中的图书id,我可以使用什么技术来显示或隐藏“添加到收藏夹”按钮呢
根据bookid单击按钮时,如何隐藏按钮?您几乎已经在考虑使用转换器了。实际的想法在实现时应该是这样的 首先,您需要实现一个转换器,在这种情况下,您需要将
bookid
转换为Visibility
值
public class BookIdToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
//value is booking id here, which means that you just need to check against the isolatedStorageSettings
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return null;
}
}
在数据模板
中,绑定应按如下方式进行:
<Button Content="Add To Favourites" Tag="{Binding BookId,Mode=OneWay}"
Click="Button_Click_1" Visibility={Binding BookId,Converter={StaticResource TheConverterCreatedAbove}} >
</Button>
这就可以了。MVVM的方法是扩展ViewModel。最好向BookViewModel添加AddToFavoritesCommand,而不是将逻辑放在代码后面。如果该按钮绑定到该命令,当该命令正确(使用CanExecuteChanged)将CanExecute切换为false时,它将自动禁用 在您的情况下,您可以添加一个属性IsFavorite或CanAddToFavoirtes,然后使用标准BoolToVisibility转换器(命令执行将设置此属性,BookViewModel将使用从IsolatedStorage读取的正确值进行初始化) 书籍呈现背后的所有逻辑以及与书籍相关的功能都属于BookViewModel