所以我正在使用MVVM模式在C#中开发Windows Phone 8应用程序。我有一个屏幕,布局需要像这样:
所以我一直试图在xaml代码中设置它,它看起来像这样:
<StackPanel Orientation="Vertical">
<TextBlock Margin="20,0,20,0" TextWrapping="Wrap" Foreground="#c8d75a" Text="{Binding Title, Mode=TwoWay}" Height="46"></TextBlock>
<Image Margin="20,0,20,0" Source="{Binding ImageLink}" Height="200"></Image>
<TextBlock Margin="20,0,20,0" TextWrapping="Wrap" Foreground="#7e9d83" Text="{Binding subTitle, Mode=TwoWay}" Height="46"></TextBlock>
<TextBlock Margin="20,0,20,0" TextWrapping="Wrap" Foreground="#7e9d83" Text="{Binding Description, Mode=TwoWay}" Height="46"></TextBlock>
<ItemsControl ItemsSource="{Binding RelatedLinks}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Margin="20,0,20,0" Foreground="#c8d75a" Text="{Binding Text, Mode=TwoWay}" Height="46">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<cm:ActionMessage MethodName="OpenLink">
<cm:Parameter Value="{Binding Href}"></cm:Parameter>
</cm:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock Margin="20,0,20,0" TextWrapping="Wrap" Foreground="#7e9d83" Text="{Binding Creator, Mode=TwoWay}" Height="46"></TextBlock>
<TextBlock Margin="20,0,20,0" TextWrapping="Wrap" Foreground="#7e9d83" Text="{Binding PubDate, Mode=TwoWay}" Height="46"></TextBlock>
现在一切正常,但我的列表中的部分说明了&#34;如果按钮的动态列表是&gt; 1在这里插入一个TextBlock&#34;。
让我试着进一步解释。我的{Binding RelatedLinks}
绑定到ObservableCollection<RelatedLink>
,其中RelatedLink
是一个包含两个字符串Href
和Text
的对象。
所以if my ObservableCollection of RelatedLinks is bigger then 1
我希望在这个ItemsControl列表上方放置一个标题文本。我怎样才能做到这一点?
答案 0 :(得分:1)
ObservableCollection
实现INotifyPropertyChanged
并通知Count
的更改,以便您可以绑定它。要显示或隐藏TextBlock
,您可以像这样更改Visibility
:
<TextBlock
Visibility="{Binding RelatedLinks.Count, Converter={StaticResource CountToVisibilityConverter}}"
... />
剩下的就是编写CountToVisibilityConverter并将其添加到资源中。它的Convert
方法类似于:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (int)value > 1 ? Visibility.Visible: Visibility.Collapsed;
}
另一种方法是将属性bool TextVisible
添加到ViewModel并在每次更新ObservableCollection时更新它,然后使用标准的BoolToVisibilityConverter。