繁体   English   中英

绑定WP8中ListBox中的项目

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

看看这个 实际上,您真正需要的是通过实现IValueConverterConverter 也是一个很好的例子,您可以在其中阅读。 将布尔值与按钮的可见性属性绑定,就可以完成! ;)

您可以使用布尔值到可见性转换器来隐藏,显示按钮,下面是示例:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM