【问题标题】:Get object value from Listbox Item从列表框项中获取对象值
【发布时间】:2012-02-13 23:54:41
【问题描述】:

我目前正在使用 C# 开发 Windows Phone 7.0 应用程序。我得到了一个列表框,其中的项目基于 WCF 服务的结果。我创建了自己的对象,其中包含一些从数据库中获取的值。问题是我不知道如何根据使用 web 服务获取的项目参数的值来更改每个列表框项目的内容。

结构:

  • 用户进入 XAML 页面
  • 正在客户端和 Web 服务之间打开连接
  • webservice返回一个List<Friend> Friend里面的重要参数叫做Verified
  • 列表框项设置使用:lstFriends.ItemsSource = e.Result;

我想做什么:

  • 我想检查参数Verified之后的每个Listbox Item并检查它的值。
  • 根据参数是 true 还是 false,Listbox Item 中的 TextBlock 应该有不同的文本。

谢谢

【问题讨论】:

    标签: c# wcf silverlight windows-phone-7 listbox


    【解决方案1】:

    这可能是一种不使用代码隐藏的丑陋方式,但您可以为您的列表框项创建一个模板,其中包含两个文本块(类似的东西):

    <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 将 Verified 的布尔值更改为 Visible 如果 True 和 Collapsed if False 对于第一个文本块和 ReverseBoolToVisibilityConverter 将 Verified 的布尔值更改为 Visible 如果 False 和 Collapsed 如果 True在第二个文本块上。这样,一个文本块将始终在列表框项中可见,而一个文本块将始终折叠,具体取决于 Verified 属性的值。

    如果你不知道怎么做值转换器,可以看HERE

    这未经测试,并不是您需要的所有代码,但它应该可以工作。这假定两个不同的文本块将始终包含相同的文本,并且 Verified 属性是一个布尔属性,如果不是,那么您可能想找出另一种方法来做到这一点。

    再想一想,您可以只做一个值转换器和一个文本块,然后将 Verified 的值转换为您想要的文本。那会更容易。

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

    【讨论】:

    • 不要为此更改控件模板,ItemTemplate 应该更合适...
    猜你喜欢
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多