如何向资源字典添加绑定?

How Can I Add a Binding to a Resource Dictionary?

我的 UserControl 上有多个控件使用相同的可见性绑定:

<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 值...但我也无法让它工作。

如何重构可见性绑定,以便我只需定义一次?

你不能。但是您可能想要使用动态资源。在 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;

编辑:实际上,如果您不希望它们在所有应用程序中都是全局的,您可以为特定用户控制定义动态资源。