ListBox项TextBlock根据条件进行更改

本文关键字:条件 TextBlock ListBox | 更新日期: 2023-09-27 18:30:09

我正在用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.

请帮帮我。

ListBox项TextBlock根据条件进行更改

您可以使用Converter在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.xsaml:

xmlns:converters="clr-namespace:MyApplicationNameSpace"

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

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

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

获取列表中的每一项并给出条件。

试试这个。。

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

productlist.ItemsSource=rootObject;