我有这样的网格:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="1" Margin="12,0,0,10" x:Name="TxtBox_Email" Text="{Binding m_strMail}" />
</Grid>
如果变量binded为空,我想隐藏整个网格。 我想我需要使用转换器,但我需要一些语法帮助。
有人可以帮我吗?
非常感谢:)
答案 0 :(得分:3)
public class StringLengthVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
var strValue = value as String;
return string.IsNullOrEmpty(strValue) ? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
//We can't support this
throw new NotImplementedException();
}
}
要使用转换器,请向页面添加资源:
<phone:PhoneApplicationPage.Resources>
<local:StringLengthVisibilityConverter x:Key="LengthConverter" />
</phone:PhoneApplicationPage.Resources>
将local
替换为指向转换器的CLR命名空间的xmlns。
之后,我们可以在网格中使用我们的转换器:
<Grid Visibility="{Binding Path=m_strMail, Converter={StaticResource LengthConverter}}" />
答案 1 :(得分:0)
在为网格创建样式时,只能在xaml中编写它。但是你必须写一个Style foreach不同的Binding。此示例中的Viewmodel只包含一个名为MyString的字符串Property。
<Window xmlns:local="clr-namespace:PlayGroundSecond">
<Window.DataContext>
<local:SimpleViewModel/>
</Window.DataContext>
<Window.Resources>
<Style x:Key="MyOwnTextBlockStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding MyString}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding MyString}" Value="">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TextBlock Style="{StaticResource MyOwnTextBlockStyle}" Text="MyText"/>
</Grid>
</Window>
我认为vcsjones&#39;解决方案更好,因为您可以将它用于每个Binding,在我的解决方案中,您必须使用2个DataTriggers编写一个带有foreach Binding的样式。
答案 2 :(得分:0)
没有转换器,您可以像这样使用
<Grid>
<Grid.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=m_strMail}" Value="">
<Setter Property="FrameworkElement.Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="1" Margin="12,0,0,10" x:Name="TxtBox_Email" Text="{Binding m_strMail}" />
</Grid>