我的列表框中包含多个项目,如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的名称,但在我的情况下,我无法获取列表框中的图像名称,所以现在如何绑定数据?
答案 0 :(得分:3)
只需将属性TextVisiblity
和ImageVisibility
添加到您的视图模型即可。然后直接绑定到它们:
<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;