ListBox项TextBlock根据条件更改

时间:2013-09-04 04:03:02

标签: c# json windows-phone-7 windows-phone-8 windows-phone-7.1

我在JSON中获取数据并通过

存储在List中
List<Product> rootObject = JsonConvert.DeserializeObject<List<Product>>(e.Result);

之后,我在ListBox中显示数据

  productlist.ItemsSource = rootObject;

我的xaml文件: -

 <ListBox Height="600" HorizontalAlignment="Left" Margin="5,91,0,0" Name="productlist" VerticalAlignment="Top" Width="441" 
             SelectionChanged="productlistselectionchanged">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Height="132">
                    <!--    <Image Source="{Binding Path=http://callme4.com/images/classifieds/ad_images/IMG_20130728_132750.jpg}" Height="73" Width="73" VerticalAlignment="Top" Margin="0,10,8,0"/> -->
                    <StackPanel Width="370">
                        <TextBlock Text="{Binding title}" Foreground="#FFC8AB14" FontSize="28" />
                        <TextBlock Text="{Binding city}" TextWrapping="Wrap" FontSize="24" />
<TextBlock Text="{Binding realdata}" TextWrapping="Wrap" FontSize="24" />
 <TextBlock Text="{Binding gender}" TextWrapping="Wrap" FontSize="24" />
 <TextBlock Text="{Binding age}" TextWrapping="Wrap" FontSize="24" />
                        <TextBlock Text="{Binding price}" TextWrapping="Wrap" FontSize="24" />
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

这很好。

但我在文本块中有条件。

if ( realdata == 1)
gender and age should be display and price should be hide.
else
price should be display. and Gender with age should be hide.

请帮帮我。

2 个答案:

答案 0 :(得分:2)

您可以使用转换器在realdata上绑定的Visibility属性。因此,您的.xaml文件应该与您在以下代码段中看起来一样:

<ListBox Height="600" HorizontalAlignment="Left" Margin="5,91,0,0" Name="productlist" VerticalAlignment="Top" Width="441" 
             SelectionChanged="productlistselectionchanged">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Height="132">
                    <!--    <Image Source="{Binding Path=http://callme4.com/images/classifieds/ad_images/IMG_20130728_132750.jpg}" Height="73" Width="73" VerticalAlignment="Top" Margin="0,10,8,0"/> -->
                    <StackPanel Width="370">
                        <TextBlock Text="{Binding title}" Foreground="#FFC8AB14" FontSize="28" />
                        <TextBlock Text="{Binding city}" TextWrapping="Wrap" FontSize="24" />
<TextBlock Text="{Binding realdata}" TextWrapping="Wrap" FontSize="24" />
 <TextBlock Text="{Binding gender}" Visibility="{Binding readldata, Converter={StaticResource VisibilityConverter}}" TextWrapping="Wrap" FontSize="24" />
 <TextBlock Text="{Binding age}" Visibility="{Binding readldata, Converter={StaticResource VisibilityConverter}}" TextWrapping="Wrap" FontSize="24" />
                        <TextBlock Text="{Binding price}" Visibility="{Binding readldata, Converter={StaticResource VisibilityConverter}}" TextWrapping="Wrap" FontSize="24" />
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

在这种情况下,您必须创建VisibilityConverter类:

public sealed class VisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            int convertValue = (int)value;
            if (convertValue == 1)
                return Visibility.Collapsed;
            else
                return Visibility.Visible;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return null;
        }
    }

将此类添加到app.xaml中的应用程序资源中。首先将转换器类的命名空间添加到app.xaml:

xmlns:converters="clr-namespace:MyApplicationNameSpace"

然后在您的资源中添加以下代码行:

<converters:VisibilityConverter  x:Key="VisibilityConverter" />

这个解决方案不是那么短,但是当你使用MVVM模式或者只是喜欢使用数据绑定时它很有帮助。

答案 1 :(得分:0)

列出清单上的每一项并给出条件。

尝试这个..

foreach (Product currentProduct in rootObject ) // Loop through List with foreach
{
        if(Product.realdata == 1) Price = "";
            else {Gender =""; Age="";}
}

productlist.ItemsSource = rootObject;