更改ListBox项目可见性

时间:2014-02-14 06:24:12

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

我的列表框中包含多个项目,如TextBlock,Image等...

现在在XAML文件中,所有项目可见性将在我的.CS文件中折叠,基于条件我决定显示哪个项目,我只需要显示TextBlock或Image,但由于默认情况下所有项目可见性都已折叠,如何动态更改ListBoxItems可见性并将数据或图像设置为项目?

这是我的XAML代码:

<ListBox Name="listBox" 
         HorizontalContentAlignment="Stretch" 
         VerticalContentAlignment="Stretch" 
         SelectionChanged="TopicListboxSelectionChanged"
         ScrollViewer.VerticalScrollBarVisibility="Disabled">
         <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Name="CellBack" Margin="0,0,0,4" Orientation="Horizontal">
                            <Border Name="borderColor" Background="#FFF2F4F7">
                                <TextBlock Name="text"
                                       Width="456"
                                       Padding="10,20,10,20"
                                       Visibility="Collapsed"
                                       TextAlignment="Center"
                                       Text="{Binding Path=Value}"
                                       Style="{StaticResource TextStyle}"/>
                            </Border>
                               <Image Name="Image"
                                       Grid.Row="0"
                                       Visibility="Collapsed"
                                       Width="Auto"
                                       Height="Auto"
                                       HorizontalAlignment="Center"
                                       VerticalAlignment="Center"
                                       Margin="1,1,1,1"/>
                        </StackPanel>
                     </DataTemplate>
                </ListBox.ItemTemplate>

修改

我在我的.CS文件中找到了像这样的图像源:

image = "Path to my soucre" + imagename +"phone.png";

现在在XAML文件中的Image中如何将此路径绑定到它?

通常我们这样做:

BitmapImage bmp = new BitmapImage(new Uri(fileName, UriKind.Relative));
                MyImage.Source = bmp;

这里MyImage是XAML文件中Image的名称,但在我的情况下,我无法获取列表框中的图像名称,所以现在如何绑定数据?

2 个答案:

答案 0 :(得分:3)

只需将属性TextVisiblityImageVisibility添加到您的视图模型即可。然后直接绑定到它们:

<DataTemplate>
    <StackPanel>
        <TextBlock Visibility="{Binding TextVisibility}" ... />
        <Image Visibility="{Binding ImageVisibility}" ... />
    </StackPanel>
</DataTemplate>

属性可以是只读的,例如:

public Visibility TextVisibility
{
    get { return Value == null ? Visibility.Collapsed : Visibility.Visible; }
}

或者,如果您不想修改模型类,可以使用IValueConverter,例如:

<TextBlock Visibility="{Binding Converter={StaticResource ModelToTextVisibility}" ... />

(为此您必须编写ModelToTextVisibility课程,请参阅here以获取有关如何操作的完整示例。)

答案 1 :(得分:1)

这就是我在代码中获取列表框项的方法。

 ListBoxItem lbi = listBox.ItemContainerGenerator.ContainerFromIndex(listBox.SelectedIndex) as ListBoxItem;

这就是我如何让它变得不可见。

 lbi.Visibility = Visibility.Collapsed;