【问题标题】:How do I use a databound identifier in databound control to get the specific resource in WPF如何在数据绑定控件中使用数据绑定标识符来获取 WPF 中的特定资源
【发布时间】:2014-05-23 21:10:55
【问题描述】:

我有数据绑定按钮,其内容(文本)应该从应用程序资源中的合并字典中检索。

但我无法对资源的密钥进行硬编码,因为我不知道密钥。需要以某种方式从数据绑定项中检索密钥。

通常只需将按钮的文本绑定到一个属性,如下所示:

<Button Content="{Binding Path=DisplayName}" ... />

但是我需要从资源中获取按钮的文本,而按钮仍然像以前一样是数据绑定的:

<Application.Resources>
    <s:String x:Key="EnglishButtonText">Enter</s:String>  
</Application.Resources>

绑定的数据项将包含一个属性public string Name{get;set;},其值为'EnglishButtonText'

所以是这样的:

<Button Content="{DynamicResource{Binding Path=Name}}" ... />

这个可以吗?

【问题讨论】:

  • 一切皆有可能。我可能会描述你需要这个的确切原因以及你为什么要像你一样解决问题。

标签: .net wpf xaml data-binding resourcedictionary


【解决方案1】:

可以使用IValueConverter 来实现,这将返回资源值。

转换器

public class ResourceLoopkupConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
                          CultureInfo culture)
    {
        return App.Current.Resources[value];
    }

    public object ConvertBack(object value, Type targetType, object parameter,
                              CultureInfo culture)
    {
        return Binding.DoNothing;
    }
}

XAML

<Button Content="{Binding Name,
                  Converter={StaticResource ResourceLoopkupConverter}}"/>

当然,您必须在 XAML 中声明转换器实例才能使用它。

【讨论】:

  • 谢谢。那么转换器会从 Name 属性接收绑定值吗?我会试试这个。
  • 是的 Name 应该有资源密钥。
  • 由于代码是通过索引访问资源,当资源值发生变化时会发生什么。我希望它表现得像一个动态资源。我能以某种方式获取转换器内部按钮的引用,并调用它的“SetResourceReference”方法吗?
  • 索引器用于通过资源名称访问资源。每当更改资源名称时,转换器将被触发并自动应用资源。
猜你喜欢
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
相关资源
最近更新 更多