如何将绑定添加到资源字典?

时间:2016-05-23 17:21:25

标签: c# wpf resourcedictionary

我的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&#39;绑定&#39;无法设置&#39;值&#39;属性类型   &#39;的DictionaryEntry&#39 ;. A&#39;绑定&#39;只能设置为   DependencyObject`的

...但随后我发现可能我应该在资源字典中加上Visibility值......但我也无法使其工作。

如何重构Visibility Binding,以便我只需要定义一次?

1 个答案:

答案 0 :(得分: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;

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