2015-04-02 2 views
0

В приложении Windows Phone 8, У меня есть список с 2 текстовыми блоками и кнопка. У меня есть список из 2 строк и boolean & Я могу привязывать строки к TextBlocks.Переплетные элементы в ListBox в WP8

<ListBox Name="ListboxTest"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Key}" TextWrapping="Wrap"/> 
      <TextBlock Text="{Binding Value}" TextWrapping="Wrap"/> 
      <Button /> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

И это код C# для привязки к списку.

public class Detail 
{ 
    public string Key { get; set; } 
    public string Value { get; set; } 
    public bool check { get; set; } 
} 
public List<Detail> ClassList = new List<Detail>(); 
ListboxTest.ItemsSource = ClassList; 

Я хочу отображать кнопку, только если логическое значение истинно. Как это сделать?

+0

Вы можете поделиться XAML? – bit

+0

@bit Я добавил код xaml. –

ответ

1

Посмотрите на this. На самом деле вам действительно нужен конвертер, используя IValueConverter. This также является хорошим примером, где вы могли бы прочитать об этом. Привяжите логическое значение с помощью свойства видимости кнопки, и все готово! ;)

+0

Я не думаю, что IValueConverter влияет на видимость кнопки. –

+0

@SundaraRajanC в следующем примере как ** NguyenKien ** написал, что вы точно видите интерфейс ** IValueConverter **. – nikogram

+0

Но @SundaraRajanC было бы лучше, если бы вы прочитали в первой из ссылок, которые я вам пришлю, чтобы понять, что такое конвертер и что делает. – nikogram

1

Вы можете использовать логическое значение для видимости преобразователя, чтобы скрыть, показать кнопку Здесь приведены примеры:

public class BoolToVisibility : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      var boolValue = false; 
      if (value != null) boolValue = (bool)value; 
      return boolValue ? Visibility.Visible : Visibility.Collapsed; 
     } 

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

В app.xaml

<my:BoolToVisibility x:Key="BoolToVisibility"/> 

В шаблоне данных

<Button Visibility="{Binding Path=YourBoolProperty,Converter={StaticResource BoolToVisibility}}> 
+0

в моем случае это будет Binding Path = check, правильно? [где проверка имеет тип bool, ссылаясь на общий код в вопросе] –

+0

Право ..... (10 символов) –

1

Пожалуйста, попробуйте использовать триггеры.

Различные триггеры в телефоне Windows Msdn.

Пожалуйста, используйте ObservableCollection в WP8 для привязки вместо списка.

Просьба сделать ваши свойства реализованы с помощью INotifyPropertyChanged Если ваше свойство Boolean не реализовано с помощью inotifypropertychanged, представление не будет знать, что значение изменено. Если триггер Data не работает.

пространство имен

xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 

    xmlns:ec="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" 
x:Class="XXX_XXXX" 

<Button Content="My button" 
       Stretch="None" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Top"> 

           <interactivity:Interaction.Triggers> 
       <ec:DataTrigger Binding="{Binding Check}" Value="True"> 
        <ec:ChangePropertyAction PropertyName="Visibility"> 
         <ec:ChangePropertyAction.Value> 
          <Visibility>Visible</Visibility> 
         </ec:ChangePropertyAction.Value> 
        </ec:ChangePropertyAction> 
       </ec:DataTrigger> 

       <ec:DataTrigger Binding="{Binding Check}" Value="False"> 
        <ec:ChangePropertyAction PropertyName="Visibility"> 
         <ec:ChangePropertyAction.Value> 
          <Visibility>Collapsed</Visibility> 
         </ec:ChangePropertyAction.Value> 
        </ec:ChangePropertyAction> 
       </ec:DataTrigger> 

      </interactivity:Interaction.Triggers> 
     </Button> 

Примечание Ответил из синтаксиса телефона, не может быть правильным

1

Или вы могли бы добавить это свойство к Detail класса:

public Visibility ButtonVisibility { 
    get { 
     return this.check == true ? Visibility.Visible : Visibility.Collapsed; 
    } 
} 

А потом просто привяжите кнопку Visibility к ButtonVisibility без каких-либо конвертеров.

<Button Visibility="{Binding ButtonVisibility}" />