[英]Binding items in ListBox in WP8
在Windows Phone 8應用程序中,我有一個帶有2個TextBlocks和一個按鈕的列表框。 我有2個字符串和一個布爾值的列表,並且能夠將字符串綁定到TextBlocks。
<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;
我只想在布爾值為true時顯示按鈕。 我該怎么做?
您可以使用布爾值到可見性轉換器來隱藏,顯示按鈕,下面是示例:
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}}>
請嘗試使用觸發器。
Windows Phone Msdn中的各種觸發器。
請使用WP8中的ObservableCollection而不是List進行綁定。
請使您的屬性通過INotifyPropertyChanged實現。如果您的布爾屬性未通過inotifypropertychanged實現,則視圖將不知道該值已更改。因此,數據觸發器將不起作用。
命名空間
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>
注意從電話語法回答可能不正確
或者,您可以將此屬性添加到Detail
類中:
public Visibility ButtonVisibility {
get {
return this.check == true ? Visibility.Visible : Visibility.Collapsed;
}
}
然后,無需任何轉換器即可將按鈕的Visibility
綁定到ButtonVisibility
屬性。
<Button Visibility="{Binding ButtonVisibility}" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.