Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 7 基于recordid的windows phone 8 longlistselector显示和隐藏按钮_Windows Phone 7_Windows Phone 8_Windows Phone_Windows Phone 7.1 - Fatal编程技术网

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