Converter visible when empty

125 Views Asked by At

How can I make a converter VisibleWhenEmptyString. I did it as below but it does not work. Regards

    <converters:ValueWhenConverter x:Key="VisibleWhenEmptyString">
    <converters:ValueWhenConverter.When>
        <x:String ></x:String>
    </converters:ValueWhenConverter.When>
    <converters:ValueWhenConverter.Value>
        <Visibility>Visible</Visibility>
    </converters:ValueWhenConverter.Value>
    <converters:ValueWhenConverter.Otherwise>
        <Visibility>Collapsed</Visibility>
    </converters:ValueWhenConverter.Otherwise>
</converters:ValueWhenConverter>
1

There are 1 best solutions below

0
Xie Steven On

If you directly use Template10 source code to debug the ValueWhenConverter, you would see that it actually is a null value when you set <x:String ></x:String>.

enter image description here

So, when your Binding path value is string.Empty, you could directly change it to null. It's the simplest way to solve this issue.

<Page.Resources>
    <converters:ValueWhenConverter x:Key="VisibleWhenTrueConverter">
        <converters:ValueWhenConverter.When>
            <x:String></x:String>
        </converters:ValueWhenConverter.When>
        <converters:ValueWhenConverter.Value>
            <Visibility>Visible</Visibility>
        </converters:ValueWhenConverter.Value>
        <converters:ValueWhenConverter.Otherwise>
            <Visibility>Collapsed</Visibility>
        </converters:ValueWhenConverter.Otherwise>
    </converters:ValueWhenConverter>
</Page.Resources>
<Grid>
    <TextBlock Text="Hello Admin" Visibility="{x:Bind IsAdmin, Converter={StaticResource VisibleWhenTrueConverter}}" />
</Grid>
public sealed partial class MainPage : Page
{
    private string _IsAdmin;
    public string IsAdmin
    {
        get { return _IsAdmin; }
        set
        {
            if (value == string.Empty)
            {
                _IsAdmin = null;
            }
            else
            {
                _IsAdmin = value;
            }
        }
    }
    public MainPage()
    {
        this.InitializeComponent();
        IsAdmin = string.Empty; ;
    }
}