2016-05-23 9 views
0

Ich habe mehrere Kontrollen auf meinem UserControl, die die gleiche Sichtbarkeit verwenden Bindung:Wie kann ich einem Ressourcenwörterbuch eine Bindung hinzufügen?

<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> 

Ich habe versucht, die Bindung an das UserControl.Resources Wörterbuch hinzuzufügen:

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

... und ich den Fehler:

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

... aber dann trat es mir, dass vielleicht sollte ich einen Visibility Wert sein Putten im Ressourcenwörterbuch ... aber ich kann das auch nicht zum Laufen bringen.

Wie kann ich die Sichtbarkeitsbindung umgestalten, so dass ich sie nur einmal definieren muss?

+0

SomeBoolean ist eine _read-only-Eigenschaft_ meines ViewModel. Ich habe meinem Benutzersteuerelement einen Namen hinzugefügt. –

+0

Es klingt für mich wie der Fehler sagt, dass ich versuche, eine binding_ auf den DictionaryEntry, die die 'UserControl.Resources' Sammlung ist –

Antwort

0

Sie können nicht. Vielleicht möchten Sie jedoch dynamische Ressourcen verwenden. Erstellen Sichtbarkeit Ressource (n) innen App.xaml wie folgt aus:

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

auf diese Sichtbarkeit von XAML überall zu binden:

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

Jetzt Wert dieser Ressource ändern Sie dies überall von Code aufrufen kann :

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

bearbeiten: Eigentlich können Sie dynamische Ressourcen für bestimmte Benutzersteuerung definieren, wenn man sie in allen global sein nicht wollen Anwendung.

Verwandte Themen