wopi
wopi

Reputation: 329

Strange behaviour of BooleanToVisibilityConverter using with Caliburn.Micro

In my WPF application I use Caliburn.Micro (2.0.1). In App.xaml I declare BooleanToVisibilityConverter

<BooleanToVisibilityConverter x:Key="BoolToVis" />

Now when I want use in one of my view this converter I wrote something like that

<Button x:Name="MyButton" Visibility="{Binding visibility,  Converter={StaticResource BoolToVis} }"/>

Everything works great but now I must use this converter in my MainVeiew. This View is my primary view. When application starts it's throw exception

System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll

It is verry strange for me because if I write in my View

<Window.Resources>
  <BooleanToVisibilityConverter x:Key="BoolToVis2" />
</Window.Resources>

and use BoolToVis2 instead of BoolToVis everything works fine. It i no big deal but I dont understand this behaviour.

Sample code of applcation:

App.xaml

<Application x:Class="Test.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:Test"
         >
<Application.Resources>
    <ResourceDictionary >
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary>
                <local:AppBootstrapper x:Key="Bootstrapper" />
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
        <BooleanToVisibilityConverter x:Key="BoolToVis" />
    </ResourceDictionary>
</Application.Resources>
</Application>

AppBootstrapper

public class AppBootstrapper:BootstrapperBase
{
    public AppBootstrapper()
    {
        Initialize();
        DisplayRootViewFor<MainViewModel>();
    }
}

MainViewModel

public class MainViewModel : Screen
{
    bool _visibility;


    public bool Visibility
    {
        get { return _visibility; }
        set
        {
            _visibility = value;
            NotifyOfPropertyChange("Visibility");
        }
    }

    protected override void OnActivate()
    {
        base.OnActivate();
        Visibility = false;
    }
}

MainView

<Window x:Class="Test.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainView" Height="300" Width="300">
<Grid>
    <Button x:Name="MyButton" Content="Test" Visibility="{Binding Visibility,  Converter={StaticResource BoolToVis}}" />
</Grid>

Upvotes: 2

Views: 1198

Answers (1)

Amey Keni
Amey Keni

Reputation: 11

Visibility property for any UIElement gets values from Visibility enumerator. instead of using boolean use Visible,Hidden or Collapsed.

Upvotes: 1

Related Questions