0

я получаю данные в формате JSON и хранения в списке поListBox элементы TextBlock изменения на основе состояния

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. 

Пожалуйста, помогите мне.

ответ

0

Возьмите каждый элемент в своем списке и дайте условие.

попробовать это ..

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

productlist.ItemsSource = rootObject;

2

Вы можете использовать свойство Видимости, связанное с realdata с конвертером. Так что ваш файл .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 или просто используете привязку данных.

Смежные вопросы