【问题标题】:How Can I Add a Binding to a Resource Dictionary?如何将绑定添加到资源字典?
【发布时间】:2016-05-23 17:21:25
【问题描述】:

我的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}" /> 

...我得到错误:

无法在类型的“值”属性上设置“绑定” '字典入口'。 “绑定”只能设置在 DependencyObject 的 DependencyProperty`

...但后来我突然想到,也许我应该在资源字典中添加一个 Visibility 值...但我也无法让它工作。

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

【问题讨论】:

  • SomeBoolean 是我的 ViewModel 的一个只读属性。我已经为我的 UserControl 添加了一个名称。
  • 在我看来,错误是说我正在尝试在 DictionaryEntry 上 设置绑定,即 UserControl.Resources 集合

标签: c# wpf resourcedictionary


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2011-08-15
    • 2023-04-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多