2012-02-13 56 views
0

我目前正在用C#開發Windows Phone 7.0應用程序。我有一個列表框,這些項目是基於WCF服務的結果。我創建了自己的對象,其中包含從數據庫中提取的幾個值。問題是我不知道如何更改每個Listbox項目的內容,具體取決於使用Web服務獲取的項目參數的值。從列表框中獲取對象值項目

結構:

  • 用戶進入XAML頁
  • 一種連接在客戶端和
  • 的web服務將返回List<Friend> web服務內朋友的重要參數被稱爲Verified
  • 之間打開
  • 列表框項目的設置使用:lstFriends.ItemsSource = e.Result;

我想要做什麼:

  • 我要檢查每一個列表框項參數Verified後檢查它的價值。
  • 根據參數是true還是false,ListBox Item中的TextBlock應該有不同的文本。

感謝

回答

1

這可能是一個醜陋的方式,沒有代碼隱藏做到這一點,但你可以做的是爲您的ListBoxItem中的模板包括兩個的TextBlocks(東西)是這樣的:

<Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem"> 
     <Setter Properties... /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBoxItem"> 
        <TextBlock Text="Verified" Visibility={Binding Verified, Converter="{StaticResource BoolToVisibilityConverter}" /> 
        <TextBlock Text="Not Verified" Visibility={Binding Verified, Converter="{StaticResource ReverseBoolToVisibilityConverter}" /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

那麼你將不得不寫兩個轉換器:BoolToVisibilityConverter如果真若假的第一個文本框和ReverseBoolToVisibilityConverter如果爲False,並暈倒驗證的布爾值更改爲可見暈倒驗證的布爾值更改爲可見如果第二個文本爲True塊。這樣,一個文本塊將始終在listboxitem中可見,並且一個文本塊將始終處於摺疊狀態,具體取決於Verified屬性的值。

如果你不知道如何做價值轉換器,你可以看看HERE

這沒有經過測試,並不是所有你需要的代碼,但它應該工作。這假定兩個不同的文本塊將總是包含相同的文本並且Verified屬性是一個布爾屬性,否則,你可能想找出另一種方法來做到這一點。

第二個想法,你可以做一個值轉換器和一個文本塊,並將Verified的值轉換爲你想要的文本。這會更容易。

<TextBlock Text="{Binding Verified, Converter="{StaticResource VerifiedToTextConverter}" /> 
+1

人們不應該改變控制模板,這一點,'ItemTemplate'應該更適合... – 2012-02-14 01:01:40

+0

@ H.B。你是正確的先生。那會更好。 – 2012-02-14 02:38:09