2013-09-27 3 views
1

Я понимаю, что свойство элемента управления Visibility не может быть привязано к данным так же, как это делают другие свойства. Ему нужен какой-то конвертер (?). При попытке реализовать решение от this question я столкнулся с ошибкой компилятора: The resource "BoolToVisible" could not be resolved. Я предполагаю, что мне нужно создать ResourceKey с именем BoolToVisible, я просто не знаю, как это сделать.Как привязать данные к свойству видимости

Я прошу, чтобы кто-то показал мне правильный способ привязки к свойству Видимость элемента управления.

* Элемент управления, который я добавляю это, является переключателем. * У меня есть bool свойство для isVisible в моей модели данных, которая будет связана с этим переключателем.

Модель данных недвижимости:

private bool _isVisible = true; 

public bool IsVisible 
{ 
     get { return _isVisible; } 
     set 
     { 
      _isVisible = value; 
      NotifyPropertyChange(() => IsVisible); 
     } 
} 

XAML:

<RadioButton Visibility="{Binding DataModel.IsVisible,Converter={StaticResource ResourceKey=BoolToVisible},RelativeSource={RelativeSource TemplatedParent}}" ... /> 

Спасибо.

+1

возможно дубликат [Привязка Кнопка Видимость для значения bool в ViewModel] (http: //stackoverflow.com/questions/7000819/binding-a-button-visibility-to-bool-value-in-viewmodel) –

+0

Свойство 'Видимость' может быть связано точно так же, как и с другими свойствами. Единственная странная вещь в том, что ее обычно называют «bool», когда она является ее собственным типом «enum», «Видимость», поэтому вам часто нужно преобразовать 'bool' в' Visibility', чтобы привязываться к Это. –

+0

@Tim S. (1 комментарий) Я не видел этого. –

ответ

3

2 Примеры:

Первый используя конвертер, как говорилось в вопросе:

public class BooleanToVisibilityConverter : IValueConverter 
    { 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    {    
     if (value == null || !(value is bool)) return Visibility.Collapsed; 

     return (bool)value ? Visibility.Visible : Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value; 
    } 
} 

в xaml:

<Window x:Class="Stackoverflow.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" 
    xmlns:local="clr-namespace:Stackoverflow" 
    > 
<Window.Resources> 
    <local:BooleanToVisibilityConverter x:Key="booleanToVisibiltyConverter"/> 
</Window.Resources> 

<Grid> 
    <Button Visibility="{Binding IsSomeThing,Converter={StaticResource booleanToVisibiltyConverter}}"/>   
</Grid> 

второй:

в вашем DataContext вы можете literly провести свойство видимости

CS:

private Visibility _myControlVisibility; 
    public Visibility MyControlVisibility 
    { 
     get { return _myControlVisibility; } 
     set { _myControlVisibility = value; } 
    } 

XAML:

<Button Visibility="{Binding MyControlVisibility}"/>   
0

Вы можете связывание видимости со свойством, вам просто необходимо иметь Dependency Property видимость поля:

Public Property MyVisibility As Windows.Visibility 
    Get 
     Return GetValue(MyVisibilityProperty) 
    End Get 

    Set(ByVal value As Windows.Visibility) 
     SetValue(MyVisibilityProperty, value) 
    End Set 
End Property 

Public Shared ReadOnly MyVisibilityProperty As DependencyProperty = _ 
         DependencyProperty.Register("MyVisibility", _ 
         GetType(Windows.Visibility), GetType(MyWindow), _ 
         New PropertyMetadata(Nothing)) 

Тогда же связывание как обычные (код в VB).

Помните, что в Новом PropertyMetadata вы можете установить начальное состояние для объекта, например:

Public Shared ReadOnly MyVisibilityProperty As DependencyProperty = _ 
         DependencyProperty.Register("MyVisibility", _ 
         GetType(Windows.Visibility), GetType(MyWindow), _ 
         New PropertyMetadata(Windows.Visibility.Hidden)) 
Смежные вопросы