在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时显示按钮。 我该怎么做?
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用boolean to visibility转换器隐藏,显示按钮 以下是示例:
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}}>
答案 2 :(得分:1)
请尝试使用触发器。
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>
注意从手机语法回答可能不正确
答案 3 :(得分:1)
或者,您可以将此属性添加到Detail
类:
public Visibility ButtonVisibility {
get {
return this.check == true ? Visibility.Visible : Visibility.Collapsed;
}
}
然后只需将按钮Visibility
绑定到ButtonVisibility
属性,无需任何转换器。
<Button Visibility="{Binding ButtonVisibility}" />