2013-09-03 3 views
0

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

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 Name="price" Text="{Binding price}" TextWrapping="Wrap" FontSize="24" /> 
         </StackPanel> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Мой список работает нормально.

Но теперь у меня есть условие цена TextBlock, такие как, например: -

if(price > 2000) 
textblock values should be purchased. 
else 
textblock values should be "not purchased" 

Но я путать об этом, как я могу это сделать?

please expert check

ответ

0

использовать преобразователь стоимости. видеть, что некоторые образцы here

Создать конвертер класса

public class PurchaseStatusConverter : IValueConverter 
{ 
    private const double comparePrice = 2000; 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     double price; 

     if (double.TryParse(value.ToString(), out price)) 
     { 
      return price > comparePrice ? "Purchased" : "Not Purchased"; 
     } 

     return "-"; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

В вашем app.xaml, определить конвертер, заботиться о пространствах имен, повторное острое должен справиться с этим для вас, если вы установили его.

<Application.Resources > 
    <ResourceDictionary> 
     <converter:PurchaseStatusConverter xmlns:converter="clr-namespace:namespacetoyourtype" x:Key="PurchaseStatusConverter" /> 
    <ResourceDictionary> 
</Application.Resources > 

, наконец, в вашем текстовом поле ссылка на преобразователь.

<TextBlock Name="price" Text="{Binding price, Converter={StaticResource PurchaseStatusConverter}}" TextWrapping="Wrap" FontSize="24" /> 
+0

, если я хочу, чтобы скрыть TextBlock на основе состояния и, если условие истинно, то две новые textblock должен отображать другой мудрый. – user1629977

+0

Вам все равно нужно будет использовать преобразователь значений и установить видимость как видимым, так и перекрываемым. Затем вы можете привязать результат к атрибуту видимости элементов управления. Просмотреть отредактированный ответ – FunksMaName

0
/// <summary> 
/// Returns a collapsed visibility when the price is less than or equal to the comparison price. 
/// </summary> 
public class PriceToVisibilityConverter : IValueConverter 
{ 
    private const double comparePrice = 2000; 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     double price; 

     if (double.TryParse(value.ToString(), out price)) 
     { 
      return price > comparePrice ? Visibility.Visible : Visibility.Collapsed; 
     } 

     return Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

в вашем app.xaml

<Application.Resources > 
    <ResourceDictionary> 
     <converter:PurchaseStatusConverter xmlns:converter="clr-namespace:namespacetoyourtype" x:Key="PurchaseStatusConverter" /> 
     <converter:PriceToVisibilityConverter xmlns:converter="clr-namespace:namespacetoyourtype" x:Key="PriceToVisibilityConverter" /> 
    <ResourceDictionary> 
</Application.Resources > 

В вашем XAML

<TextBlock Name="price" Vis Text="Some text" Visibility="{Binding Price, Converter={StaticResource PriceToVisibilityConverter}}" TextWrapping="Wrap" FontSize="24" /> 
Смежные вопросы