2012-02-13 65 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