簡體   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