1

我有這樣的Windows Phone 8 longlistselector顯示和隱藏按鈕基礎上的recordId

<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}"/> 

顯示在我的長長的名單選擇一個書單所以每本書的列表旁的add to favourites按鈕。按下該按鈕我在我isolatedstoragesetting進入按書的id這樣

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)頁面加載時我想節目時

現在還是隱藏根據bookid是否存在於獨立存儲設置中添加到「我的收藏」按鈕。我在這裏試過的是我試圖將轉換器綁定到add to favourite按鈕,並將轉換參數與bookid綁定。但是convertparameter不支持綁定。

那麼,我可以使用什麼技術來顯示或隱藏添加到收藏夾按鈕的基礎上存在於isolatedstoragesetting中的收藏夾列表中的書籍ID?

如何在基於bookid單擊時隱藏該按鈕?

回答

2

你幾乎想用轉換器。實際的想法在實現時應該看起來像這樣。

首先,您需要實現一個轉換器,在這種情況下,您需要將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; 
     } 
    } 

在你DataTemplate,結合應該發生這樣的:

<Button Content="Add To Favourites" Tag="{Binding BookId,Mode=OneWay}" 
     Click="Button_Click_1" Visibility={Binding BookId,Converter={StaticResource TheConverterCreatedAbove}} > 
</Button> 

這應該做的伎倆。

1

MVVM的方式是擴展你的ViewModel。將AddToFavoritesCommand添加到BookViewModel會更好,而不是將代碼中的邏輯放在後面。如果該按鈕綁定到該命令,它會自動禁用,當命令將正確(與CanExecuteChanged)切換CanExecute爲false。

對於你的情況,你可以添加一個屬性IsFavourite或CanAddToFavoirtes,然後使用標準的BoolToVisibility轉換器(命令執行將設置該屬性,並且BookViewModel將使用從IsolatedStorage讀取的正確值進行初始化)。

與Book有關的Book和功能的所有邏輯屬於BookViewModel。