在WP8中的ListBox中绑定项目

时间:2015-04-02 05:58:04

标签: c# xaml windows-phone-8 listbox

在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时显示按钮。 我该怎么做?

4 个答案:

答案 0 :(得分:1)

看看this。实际上,通过实施 IValueConverter ,您真正需要的是转换器This也是一个很好的例子,你可以阅读它。使用按钮的visibility属性绑定布尔值,您就完成了! ;)

答案 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}" />