【发布时间】:2012-01-26 23:02:42
【问题描述】:
列表框项模板中的控件可见性存在问题。以下是我将数据绑定到 xaml 中 imagetools:AnimatedImage 和 Textblock 的 Visibility 属性的代码:
<ListBox x:Name="listSellers" ItemsSource="{Binding TagList}" SelectionChanged="listSellers_SelectionChanged" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="0,12,0,12" Height="132">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="107"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Margin="0,0,-2,8">
<Grid>
<imagetools:AnimatedImage Source="{Binding Seller.Logo, Converter={StaticResource ImageConverter}}" Stretch="Uniform" Width="240" Template="{StaticResource AnimatedImageControlTemplate1}" Visibility="{Binding LogoVisibility}"/>
<TextBlock x:Name="sellerNameTxtBlock" TextWrapping="Wrap" Text="{Binding Seller.Name}" FontSize="24" FontFamily="Segoe WP" Margin="10,0,0,0" Foreground="#FF354F59" Height="41" Visibility="{Binding Path=SellerNameVisibility}"/>
</Grid>
</Border>
<StackPanel Grid.Column="1" Orientation="Vertical">
<!--<TextBlock TextWrapping="Wrap" Text="{Binding Seller.Name}" FontSize="24" FontFamily="Segoe WP" Margin="10,0,0,0" Foreground="#FF354F59" Height="41"/>-->
<!--<TextBlock TextWrapping="Wrap" Text="amazon.com" FontSize="16" FontFamily="Segoe WP" Margin="10,0,0,0" Foreground="#FF157CCC" Height="35"/>-->
<TextBlock TextWrapping="Wrap" Text="{Binding TotalPrice}" FontSize="21.333" FontFamily="Segoe WP Semibold" Margin="10,0,0,0" Foreground="#cc4225"/>
<TextBlock FontSize="{StaticResource PhoneFontSizeSmall}" Text="{Binding Price}" Margin="10,0,0,0" Foreground="#FF354F59"/>
<TextBlock FontSize="{StaticResource PhoneFontSizeSmall}" Text="{Binding Tax}" Margin="10,0,0,0" Foreground="#FF354F59"/>
<TextBlock FontSize="{StaticResource PhoneFontSizeSmall}" Text="{Binding Shipping}" Margin="10,0,0,0" Foreground="#FF354F59"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
以下是视图模型中属性的声明:
public Visibility LogoVisibility
{
get { return (Visibility)GetValue(LogoVisibilityProperty); }
set { SetValue(LogoVisibilityProperty, value); }
}
// Using a DependencyProperty as the backing store for LogoVisibility. This enables animation, styling, binding, etc...
public static readonly DependencyProperty LogoVisibilityProperty =
DependencyProperty.Register("LogoVisibility", typeof(Visibility), typeof(ProductDetailViewModel), new PropertyMetadata(Visibility.Collapsed));
public Visibility SellerNameVisibility
{
get { return (Visibility )GetValue(SellerNameVisibilityProperty); }
set { SetValue(SellerNameVisibilityProperty, value); }
}
// Using a DependencyProperty as the backing store for SellerNameVisibility. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SellerNameVisibilityProperty =
DependencyProperty.Register("SellerNameVisibility", typeof(Visibility), typeof(ProductDetailViewModel), new PropertyMetadata(Visibility.Collapsed));
以下是我在视图模型中设置可见性的地方:
foreach (Tag tag in tagArray)
{
if (tag.Seller.Logo.Equals(""))
{
tag.Seller.Logo = "Images/NoImageFound.png";
LogoVisibility = Visibility.Collapsed;
SellerNameVisibility = Visibility.Visible;
}
else
{
LogoVisibility = Visibility.Visible;
SellerNameVisibility = Visibility.Collapsed;
}
tag.Price = "Base: " + tag.Price;
if (tag.Tax == null)
{
tag.Tax = "Tax: N/A";
}
else
{
tag.Tax = "Tax: " + tag.Tax;
}
if (tag.Shipping == null)
{
tag.Shipping = "Ship: N/A";
}
else
{
tag.Shipping = "Ship: " + tag.Shipping;
}
tempTagList.Add(tag);
}
TagList = tempTagList;
}
这是我在后面的代码中设置数据上下文的地方:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
_productDetailViewModel = new ProductDetailViewModel();
DataContext = _productDetailViewModel;
string productTitleId = "";
if (NavigationContext.QueryString.TryGetValue("productTitleId", out productTitleId))
{
_productTitleId = productTitleId;
_productDetailViewModel.getProductDetailFromServer(_productTitleId, "");
}
}
我还在这些文件中做了一些其他的数据绑定,它们都有效。只有这个可见性绑定失败。真的不知道为什么。 =(有什么想法吗?谢谢!!!
【问题讨论】:
-
对不起,我没有清楚地描述我的问题。我想要做的是如果标志不为空,显示标志,隐藏卖家名称。当 logo 为空时,隐藏 logo,显示卖家名称。但是,在这两种情况下,都会显示徽标和卖家名称。
标签: c# windows-phone-7 xaml