Обычно есть два способа сделать это: класс преобразователя или свойство в Viewmodel, которое по существу преобразует значение для вас.
Я склонен использовать имущественный подход, если это однократное преобразование. Если вы хотите использовать его повторно, используйте конвертер. Ниже приведен пример конвертера:
<ValueConversion(GetType(Boolean), GetType(Visibility))> _
Public Class BoolToVisibilityConverter
Implements IValueConverter
Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
If value IsNot Nothing Then
If value = True Then
Return Visibility.Visible
Else
Return Visibility.Collapsed
End If
Else
Return Visibility.Collapsed
End If
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
Throw New NotImplementedException
End Function
End Class
Метод свойства ViewModel будет просто проверять значение логического свойства и возвращать видимость, основанную на этом. Обязательно реализуйте INotifyPropertyChanged и вызывайте его как для логических свойств, так и для свойств Visibility, чтобы они обновлялись должным образом.