2016-05-23 4 views
0

У меня есть несколько элементов управления на моем UserControl, которые используют ту же самую видимость Binding:Как добавить привязку к ресурсному словарю?

<UserControl x:Class="Whatever.MyClass" 
      x:Name ="TheUserControlName" 
      DataContext="MyUserControlViewModel"> 

    <Label x:Name="MyLabel" 
      Visibility="{Binding SomeBoolean, 
       ConverterParameter={StaticResource BooleanToVisibilityConverter}, 
       Converter={StaticResource BooleanValueInverter}}" 
     Style="{StaticResource LeftLabel}" 
     Content="Template _Name" 
     Target="{Binding ElementName=SomeTextBox}" /> 
</UserControl> 

Я пытался добавить привязку к UserControl.Resources словаря:

<Binding x:Key="IsCourseVisibilityBinding" 
     Path="Thing.SomeBoolean" 
     ConverterParameter="{StaticResource BooleanToVisibilityConverter}" 
     Converter="{StaticResource BooleanValueInverter}" /> 

... и я получаю ошибку:

A 'Binding' cannot be set on the 'Value' property of type 'DictionaryEntry'. A 'Binding' Can only be set on a DependencyProperty of a DependencyObject`

... но тогда это произошло со мной, что, может быть, я должен положить значение Visibility в словаре ресурсов ... но я не могу заставить это работать.

Как я могу реорганизовать привязку видимости, так что мне нужно только определить ее один раз?

+0

SomeBoolean - свойство _read-only_ моего ViewModel. Я добавил имя в свой UserControl. –

+0

Мне кажется, что ошибка говорит о том, что я пытаюсь установить привязку_ в DictionaryEntry, которая является коллекцией UserControl.Resources –

ответ

0

Вы не можете. Но вы можете использовать динамические ресурсы. Создать видимость ресурс (ы) внутри App.xaml так:

<Application.Resources> 
    <ResourceDictionary 
     <Visibility x:Key="SomeVisibility">Visible</Visibility> 
    </ResourceDictionary> 
</Application.Resources> 

Для привязки этой видимости в любом из XAML:

<Button Content="Some button" Visibility="{DynamicResource SomeVisibility}"/> 

Теперь, чтобы изменить значение этого ресурса вы можете назвать это в любом из кода :

Application.Current.Resources["SomeVisibility"] = Visibility.Collapsed; 

Edit: на самом деле вы можете определить динамические ресурсы для конкретного пользовательского элемента управления, если вы не хотите, чтобы быть глобальным во всех заявление.