0

I have three buttons and I would like to condition their visibility with a variable. But I have the impression that my variable is not detected.

MainPage.xaml :

<Button
    Margin="0,0,0,50"
    Name="startButton"
    Height="50"
    Width="250"
    Click="OnStartClick"
    ClickMode="Press"
    Visibility="{Binding StartVisibility, Converter={StaticResource BoolToVisibilityConverter}}">
    Start
</Button>
<Button
    Margin="0,0,0,50"
    Name="validButton"
    Height="50"
    Width="250"
    Click="OnValidClick"
    ClickMode="Press"
    Visibility="{Binding ValidVisibility, Converter={StaticResource BoolToVisibilityConverter}}">
    Valid
</Button>
<Button 
    Margin="0,50,0,0"
    Name="stopButton"
    Height="50"
    Width="250"
    Click="OnStopClick"
    ClickMode="Press"
    Visibility="{Binding StopVisibility, Converter={StaticResource BoolToVisibilityConverter}, Mode=OneWay}">
    Cancel
</Button>

MainPage.xaml.cs :

private IMapService _mapService;
private bool drawing = false;

public bool StopVisibility
{
    get
    {
         return drawing;
    }
}

public bool StartVisibility
{
    get
    {
         return !drawing;
    }
}

public bool ValidVisibility
{
    get
    {
         return _mapService.SketchEditorCanExecute();
    }
}

IMapService.cs :

bool SketchEditorCanExecute();

BoolToVisibilityConverter.cs :

public object Convert(object value,
                      Type targetType,
                      object parameter,
                      String language)
{
    Boolean val = false;
    if (value is Boolean)
    {
        val = (Boolean)value;
    }
    return val
        ? Visibility.Visible
        : Visibility.Collapsed;
}

With breakpoints, I see I never go through Get method. Same problem with the converter.

Any ideas?

1 Answer 1

0

You probably forgot to set the DataContext.

You can set the DataContext either in codebehind or in XAML

  1. Codebehind

    public class MainPage.xaml
    {
        public MainPage()
        {
            this.DataContext = this;
            InitializeComponent();
        }
    }
    
  2. in XAML

    <MainPage DataContext="{Binding RelativeSource={RelatativeSource Self}}" />
    

Not the answer you're looking for? Browse other questions tagged or ask your own question.