1

我有一个这样的网格:

<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>

如果绑定的变量为空,我想隐藏整个网格。我想我需要使用转换器,但我需要一些语法帮助。

任何人都可以帮助我吗?

非常感谢 :)

4

3 回答 3

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}}" />
于 2013-01-06T20:52:17.553 回答
0

当您为网格创建样式时,可以仅在 xaml 中编写它。但是你必须为每个不同的绑定编写一个样式。此示例中的 Viewmodel 仅包含一个名为 MyString 的字符串属性。

<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 的解决方案更好,因为您可以将它用于每个绑定,并且在我的解决方案中,您必须为每个绑定编写一个带有 2 个 DataTriggers 的样式。

于 2013-01-08T05:29:14.127 回答
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>
于 2013-10-29T11:06:04.657 回答