The following describes how to used a converter to directly bind your ViewModel properties to the Visibility of controls in your view.

First we define a converter that converts a boolean value into a Visibility enum value and back.

[ValueConversion(typeof(bool), typeof(Visibility))]
public class VisibilityConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    if (value == null)
      return null;
    bool b = (bool)value;
    if (b)
      return Visibility.Visible;
    else
      return Visibility.Collapsed;
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  {
    Visibility vValue = (Visibility)value;
    if (vValue == Visibility.Collapsed || vValue == Visibility.Hidden)
      return false;
    return true;
  }
}

Define the converter in the resources of your view:

<Application.Resources>
  <ResourceDictionary>
    <converters:VisibilityConverter x:Key="VisibilityConverter" />
  </ResourceDictionary>
</Application.Resources>

Bind the Visibility of your view elements to the VM properties, using the converter:

<TreeViewItem IsExpanded="True" Visibility="{Binding BasicDataMenuVisible, Converter={StaticResource VisibilityConverter}}"/>